代码之家  ›  专栏  ›  技术社区  ›  djdd87

这些例子中哪一个代表DDD的正确使用?

  •  5
  • djdd87  · 技术社区  · 14 年前

    我已经和DDD合作几个月了,我遇到了一些我不确定的事情。

    以添加 Product 给一个 Order 反对。从我们的管制员那里,我们会得到一个 int 产品 在数据库中。以下两个例子中哪一个是正确的(如果它们都是错误的,请告诉我)?

    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);
        }
    }
    

    控制器实例化产品本身并通过以下方法将其添加进来:

    void AddProduct(Product product)
    {
        productList.Add(product);
    }
    

    例二:

    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);
        }
    }
    

    这个 命令

    Product AddProduct(int productId, IProductRepository productRepository)
    {
        Product product = productRepository.GetProduct(productId);
        productList.Add(product);
    
        return product;
    }
    

    我现在已经看了第一个示例,因为您的域模型不应该在内部调用服务方法,但是我最近看到了一些使用第二个示例的示例,它看起来确实很整洁。在我看来 快要贫血了。 例二

    2 回复  |  直到 14 年前
        1
  •  2
  •   Aliostad    14 年前

    第二个很可怕。。。

    我倾向于选择第一个。

        2
  •  1
  •   djdd87    14 年前

    是的,伙计,第一个更好。。。

    将产品添加到列表中与产品存储库无关,它应该只获取产品。