djd*_*d87 5 c# design-patterns domain-driven-design
我已经和DDD合作了几个月了,我遇到了一些我不确定的事情.
采取添加的简单的例子Product,以一个Order对象.从我们的Controller,我们int通过UI传递,代表Product数据库中的一个.以下哪两个例子是正确的(如果它们都错了,请告诉我)?
示例一:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Controller实例化产品本身并通过以下方法添加它:
void AddProduct(Product product)
{
productList.Add(product);
}
Run Code Online (Sandbox Code Playgroud)
示例二:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
该Order域模型传递给它注入的产品库,并且它得到的产品,并增加了它:
Product AddProduct(int productId, IProductRepository productRepository)
{
Product product = productRepository.GetProduct(productId);
productList.Add(product);
return product;
}
Run Code Online (Sandbox Code Playgroud)
我目前已经去了第一个例子,因为你的域模型不应该在内部调用服务方法,但是我最近看到了一些使用我的第二个例子的例子,它确实看起来很整洁.在我看来,示例一正在接近贫血.示例二会将所有产品添加逻辑移动到域模型本身.
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |