czy można korzystać z IoC i Rich Domain? Czy są jakieś dobre przykłady, które to robią?
Zakładam, że masz na myśli DI zamiast IoC, a projekt, nad którym pracowałeś, wykorzystuje pojemnik DI, taki jak Spring. IoC ma dwa główne smaki: DI i wzór lokalizatora. Nie rozumiem, dlaczego wzór Lokalizatora powinien być problemem, więc skupmy się na DI.
Nie sądzę, żeby to było możliwe, a przynajmniej byłoby bardzo niepraktyczne. Głównym aspektem kontenerów DI jest to, że kontrolują tworzenie obiektów, gdy wstrzykują je innym („obiektom zarządzanym”). Zestaw zarządzanych obiektów, który żyje podczas uruchamiania projektów, jest niezależny od tego, które elementy domeny istnieją w projekcie, ale zależy od tego, w jaki sposób obiekty są okablowane i jakie zakresy (singleton, prototyp) są do nich przypisane.
Dlatego nie chcesz, aby kontener DI zarządzał obiektami domeny. Ale jeśli tworzysz obiekty ręcznie (z nowym), nie możesz wstrzykiwać innych obiektów do obiektów domeny. (Pozostawiając potencjalne obejścia z ręcznym okablowaniem na bok.) Ponieważ te zastrzyki są potrzebne do zastąpienia implementacji innymi, nie można zastąpić funkcjonalności bogatych obiektów domeny za pomocą DI. W związku z tym nie będziesz chciał umieszczać funkcji w obiektach domeny lub utracisz funkcje DI.
Nie rozumiem, jak mógłby działać hipotetyczny kontener DI, który nie zarządza twoimi obiektami, i żadna z istniejących implementacji na to nie pozwala. Można więc śmiało twierdzić, że DI polega na zarządzaniu obiektami. Dlatego zawsze kusi cię do podzielenia potencjalnych obiektów Rich Domain na jedną klasę anemiczną i jedną lub kilka klas skryptów transakcyjnych.