【发布时间】:2009-12-12 11:52:03
【问题描述】:
如果服务使用存储库来持久化数据,它不应该在存储库中吗?
【问题讨论】:
-
对不起,你在说什么?
标签: service repository domain-driven-design
如果服务使用存储库来持久化数据,它不应该在存储库中吗?
【问题讨论】:
标签: service repository domain-driven-design
嗯,我认为根据您的问题域和您选择的一般架构,答案是相当主观的。但是,fwiw,这是我的方法:
存储库提供对象存储容器的统一视图。
服务提供在许多情况下使用存储库的功能。
举个例子:我们有一个购物车应用,它需要知道
这可能是一个结构。
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 方法添加到货币存储库中。嗯,答案是 - 将您的购物车业务逻辑与货币存储库分离。这将允许您在以后更改货币存储库。
无论如何,正如我所说,您将某物称为服务还是存储库是非常主观的。但总的来说,我认为服务是一种更高级别的抽象,它提供了分层存储在存储库上的额外逻辑和功能。
希望对您有所帮助。
【讨论】:
我相信埃文斯关于这个主题的前几段非常清楚。
服务用于放置不适合任何特定域对象的逻辑。您的服务是否使用存储库并不重要 - 定义服务的是行为逻辑。
不幸的是,服务 是一个重载的术语 - 很容易将“Web 服务”和“域服务”混为一谈。
【讨论】: