Chciałbym zasugerować wyjaśnienie niektórych terminów, których tu używasz, w szczególności „zależności” i „wstrzykiwania zależności”.
Zależność:
„Zależność” jest zazwyczaj złożonym obiektem, który wykonuje pewne funkcje, od których może zależeć inna klasa. Klasycznymi przykładami mogą być rejestrator lub moduł dostępu do bazy danych lub jakiś komponent przetwarzający określoną logikę biznesową.
Obiekt zawierający tylko dane, taki jak DTO lub obiekt wartości, nie jest zwykle określany jako „zależność”, ponieważ nie pełni on niektórych potrzebnych funkcji.
Gdy spojrzeć na to w ten sposób, co robisz w swoim przykładzie ( komponując ten DO
obiekt z listy D02
obiektów przez konstruktora) nie powinny być uważane za „zastrzyk dependecy” w ogóle. To tylko ustawienie nieruchomości. Od Ciebie zależy, czy podasz je w konstruktorze, czy w inny sposób, ale przekazanie go przez konstruktor nie spowoduje wstrzyknięcia zależności.
Wstrzykiwanie zależności:
Gdyby twoja DO2
klasa faktycznie zapewniała dodatkowe funkcje, których DO
potrzebuje klasa, to naprawdę byłaby to zależność. W takim przypadku klasa zależna DO
powinna zależeć od interfejsu (takiego jak ILogger lub IDataAccessor), a z kolei polegać na kodzie wywołującym, który zapewnia ten interfejs (innymi słowy, „wstrzykuje” go do DO
instancji).
Wstrzyknięcie zależności w taki sposób sprawia, że DO
obiekt jest bardziej elastyczny, ponieważ każdy inny kontekst może zapewnić własną implementację interfejsu do DO
obiektu. (Pomyśl o testowaniu jednostkowym.)