Tôi hiểu khái niệm đằng sau DI, nhưng tôi chỉ đang tìm hiểu những gì các vùng chứa IoC khác nhau có thể làm. Có vẻ như hầu hết mọi người ủng hộ việc sử dụng IoC container để kết nối các dịch vụ không trạng thái, nhưng còn việc sử dụng chúng cho các đối tượng trạng thái như thực thể thì sao?
Cho dù đó là đúng hay sai, tôi thường nhồi nhét các thực thể của mình với hành vi, ngay cả khi hành vi đó yêu cầu một lớp bên ngoài. Thí dụ:
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);
}
}
Như bạn có thể thấy, các phụ thuộc là Constructor Injected. Bây giờ cho một vài câu hỏi.
Việc để các thực thể của bạn phụ thuộc vào các lớp bên ngoài như ShipQuoter có bị coi là hành vi xấu không? Loại bỏ những phụ thuộc này dường như đưa tôi đến một miền thiếu máu, nếu tôi hiểu đúng định nghĩa.
Việc sử dụng vùng chứa IoC để giải quyết những phụ thuộc này và xây dựng một thực thể khi cần thiết có phải là một phương pháp không tốt? có khả năng làm cái này không?
Cảm ơn cho bất kỳ cái nhìn sâu sắc.