W ubiegłym roku stworzyłem nowy system przy użyciu Dependency Injection i kontenera IOC. To nauczyło mnie wiele o DI!
Jednak nawet po zapoznaniu się z pojęciami i właściwymi wzorami uważam za wyzwanie rozdzielić kod i wprowadzić kontener IOC do starszej aplikacji. Aplikacja jest na tyle duża, że prawdziwa implementacja byłaby przytłaczająca. Nawet jeśli wartość została zrozumiana i czas został przyznany. Kto ma czas na coś takiego?
Celem jest oczywiście wprowadzenie testów jednostkowych do logiki biznesowej!
Logika biznesowa powiązana z zabezpieczającymi wywołania wywołaniami bazy danych.
Przeczytałem artykuły i rozumiem niebezpieczeństwa wstrzyknięcia uzależnienia od biednego człowieka, jak opisano w tym artykule Los Techies . Rozumiem, że tak naprawdę niczego nie oddziela.
Rozumiem, że może to wymagać dużego refaktoryzacji całego systemu, ponieważ implementacje wymagają nowych zależności. Nie rozważałbym użycia go w nowym projekcie o dowolnej wielkości.
Pytanie: Czy można używać DI Poor Man do wprowadzenia testowalności do starszej aplikacji i zacząć toczyć piłkę?
Ponadto, czy stosowanie DI biednego człowieka jako oddolnego podejścia do prawdziwego wstrzykiwania zależności jest cennym sposobem edukowania na temat potrzeby i korzyści wynikających z tej zasady?
Czy można refaktoryzować metodę, która ma zależność od wywołań bazy danych i streszczenie, która wywołuje interfejs? Po prostu posiadanie tej abstrakcji sprawiłoby, że ta metoda byłaby testowalna, ponieważ próbna implementacja mogłaby zostać przekazana przez przeciążenie konstruktora.
W przyszłości, gdy wysiłek zyska zwolenników, projekt może zostać zaktualizowany w celu wdrożenia kontenera MKOl, a konstruktorzy będą tam, którzy przyjmą abstrakcje.
I consider it a challenge to decouple code and introduce an IOC container into a legacy application
oczywiście że tak. To się nazywa dług techniczny. Dlatego przed każdą poważną modernizacją lepiej jest stosować małe i ciągłe refaktory. Zmniejszenie głównych wad projektowych i przejście do IoC byłoby mniej trudne.