Mam teraz do czynienia z integracją kontenera inwersji sterowania (IoC) z istniejącą aplikacją i szukam rekomendacji, w jaki sposób można to najłatwiej osiągnąć z ostatecznym celem zmniejszenia sprzężenia, a tym samym zwiększenia testowalności. Chociaż generalnie nie klasyfikowałbym większości klas jako obiektów boskich , każda z nich ma zbyt wiele obowiązków i ukrytych zależności poprzez statykę, singletony i brak interfejsów.
Oto kilka przykładów niektórych wyzwań, z którymi trzeba się zmierzyć:
- Rzadko stosuje się wstrzyknięcie zależności
- Istnieje wiele metod statycznych - zarówno metod fabrycznych, jak i pomocniczych
- Singletony są dość powszechne
- Interfejsy, gdy są używane, nie są zbyt szczegółowe
- Obiekty często przyciągają niepotrzebne zależności poprzez klasy podstawowe
Naszym celem jest, aby następnym razem, gdy będziemy musieli dokonać zmian w konkretnym obszarze, staramy się wyeliminować zależności, które w rzeczywistości istnieją, ale są ukryte za globalsami, takimi jak singletony i statyka.
Przypuszczam, że czyni to kontener IoC drugorzędnym w stosunku do wprowadzenia wstrzykiwania zależności, ale oczekiwałbym, że istnieje zestaw praktyk i zaleceń, które można zastosować lub rozważyć, które pomogą nam przełamać te zależności.