Tôi đã làm việc với DDD được vài tháng và tôi đã gặp một vài điều mà tôi không chắc chắn.Ví dụ nào trong số này đại diện cho việc sử dụng DDD đúng cách?
Lấy ví dụ đơn giản về việc thêm Product
vào đối tượng Order
. Từ Bộ điều khiển của chúng tôi, chúng tôi sẽ có một số int
được truyền qua giao diện người dùng đại diện cho một số Product
trong cơ sở dữ liệu. Ví dụ nào trong hai ví dụ sau là đúng (cho tôi biết nếu cả hai đều sai)?
Ví dụ Một:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
Product product = _productRepository.GetProduct(productId);
order.AddProduct(product);
}
}
Controller instantiates sản phẩm riêng của mình và bổ sung nó trong qua phương pháp:
void AddProduct(Product product)
{
productList.Add(product);
}
Ví dụ thứ hai:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
order.AddProduct(productId, _productRepository);
}
}
Các Order
mô hình miền có kho sản phẩm tiêm truyền cho nó và nó được các sản phẩm và thêm nó:
Product AddProduct(int productId, IProductRepository productRepository)
{
Product product = productRepository.GetProduct(productId);
productList.Add(product);
return product;
}
Tôi hiện đã đi cho ví dụ đầu tiên, bởi vì Domain Model của bạn không bao giờ nên gọi một phương thức dịch vụ trong nội bộ, tuy nhiên Tôi đã nhìn thấy một vài ví dụ gần đây mà sử dụng ví dụ thứ hai của tôi và nó trông gọn gàng. Dường như với tôi rằng Ví dụ Một đang hợp nhất trên Đại dịch. Ví dụ Hai sẽ di chuyển tất cả logic Thêm sản phẩm vào chính Mô hình miền.
Có vẻ như ví dụ đầu tiên sẽ dẫn đến thiết kế theo hướng tải dữ liệu tham lam và thứ hai hướng tới tải chậm. Bạn thích cái nào trong số này? –
Đơn đặt hàng của bạn được lưu như thế nào sau khi sản phẩm được thêm vào danh sách trong bộ nhớ? Có một số phép thuật xảy ra (xin lỗi tôi không biết C# có thể đối tượng Order là một proxy được quản lý bởi một framework không?) –