这是正确的域模型吗?

时间:2011-07-16 06:46:49

标签: design-patterns domain-driven-design repository-pattern

我在我的书和互联网上搜索了我的问题,但我没有找到。也许你可以帮助我。

让我们假设我以这种方式构建了域层(我认为它是基本结构):

Product
IProductRepository
IProductService
ProductCalculator


class ProductService : IProductService
//..
    public List<Product> GetSimilarProducts(productId) {
        // body of this method is just an example, it doesn't have sense
        var product = repo.FindById(productId)
        repo.FindBySimilarName(product.Name);

        // some more logic
        // and more

        return similarsProducts;
    }
//..

class ProductCalculator : ICalculate
//..
    private Product _p;
    public ProductCalculator(Product p) {
        _p = p;
    }

    public double Calculate() {
            // logic..
            // calling repo
            // calling services
            // calling own class methods

            return result;
    }

//..

所以,问题是:ProductCalculator是否可以同时使用ProductRepository和ProductService? 或者我可能走得更远:这是正确设计的域名吗?

服务可以使用自己的方法来解决任务吗?我正准备将ProductCalculator更改为Service,但我不知道这是否正确。我只想问,在我看来,没有。

祝你好运

ps您是否有链接到开源项目(例如,在github上),值得查看他们的域模型?

1 个答案:

答案 0 :(得分:4)

当模型的概念会扭曲任何实体或价值对象时,服务是合适的。

来自埃文斯的DDD,一项优质服务具有以下特点:

  • 该操作涉及的域概念不是实体或值对象的自然部分
  • 界面是根据域模型中的其他元素定义的
  • 操作无状态

Los Techies有一些关于何时创建服务的精彩文章。