Rozumiem koncepcję DI, ale dopiero uczę się, co mogą zrobić różne kontenery IoC. Wygląda na to, że większość ludzi opowiada się za używaniem kontenerów IoC do łączenia usług bezstanowych, ale co z używaniem ich do obiektów stanowych, takich jak encje?
Niezależnie od tego, czy jest to dobre, czy złe, zwykle napycham swoje byty zachowaniem, nawet jeśli to zachowanie wymaga zewnętrznej klasy. Przykład:
public class Order : IOrder
{
private string _ShipAddress;
private IShipQuoter _ShipQuoter;
public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
{
// OrderData comes from a repository and has the data needed
// to construct order
_ShipAddress = OrderData.ShipAddress; // etc.
_ShipQuoter = ShipQuoter;
}
private decimal GetShippingRate()
{
return _ShipQuoter.GetRate(this);
}
}
Jak widać, zależności są wstrzykiwane przez konstruktor. A teraz kilka pytań.
Czy uzależnienie podmiotów od zewnętrznych klas, takich jak ShipQuoter, jest uważane za złą praktykę? Wydaje się, że wyeliminowanie tych zależności prowadzi mnie do domeny anemicznej, jeśli dobrze rozumiem definicję.
Czy używanie kontenera IoC do rozwiązywania tych zależności i konstruowania jednostki w razie potrzeby jest złą praktyką? Czy da się to zrobić?
Dzięki za wgląd.