存储库中有什么样的逻辑,服务中有什么样的?

时间:2009-12-12 11:52:03

标签: service repository domain-driven-design

如果服务使用存储库来保存数据,那么它不应该存储在存储库中吗?

2 个答案:

答案 0 :(得分:4)

嗯,我认为根据您的问题域和您选择的一般架构,答案是非常主观的。但是,fwiw,这是我的方法:

存储库提供对象存储容器的统一视图。

服务提供了在许多情况下使用存储库的功能。

我们举一个例子:我们有一个购物车应用程序,它需要知道

  1. 如何保存订单
  2. 如何向a中的订单添加付款 各种各样的现金
  3. 列出项目如何查找 目前的特殊情况 货币。
  4. 这可能是一种结构。

    CurrencyRatesRepository
      AddCurrency( "US$" )
      AddCurrency( "EUR" )
      AddEffectiveeRate( "US$", "EUR", 2009/01/01 14:00:00:00.000, 1.5 )
    
    
    CurrencyService
      rate = GetEffectiveRate( "US$", "EUR" );
    
    ShoppingCartRepositroy
      SaveOrder( orderid=1, "Pair of Shoes", EUR99.99 );
      AddPayment( orderid, "US$", 150 );
    

    现在,ShoppingCart存储库上的AddPayment方法可以在currencyserve上调用GetEffectiveRate来计算150欧元的固有价值。

    明显的问题。为什么不关心服务为什么不只是将GeteffectiveRate方法添加到货币存储库。那么,答案是 - 将您的购物车业务逻辑与货币存储库分离。这将允许您在以后更改货币存储库。

    无论如何,正如我所说,你称之为服务或存储库是非常主观的。但总的来说,我认为服务是一种更高级别的abstration,可以在存储库中提供额外的逻辑和功能。

    希望有所帮助。

答案 1 :(得分:1)

我相信埃文斯关于这个主题的前几段很清楚。

服务用于放置自然不适合任何特定域对象的逻辑。您的服务是否使用存储库并不重要 - 它是定义服务的行为逻辑。

不幸的是,服务是一个过载的术语 - 很容易让“ Web服务”和“域名服务”混淆。< / p>