如果服务使用存储库来保存数据,那么它不应该存储在存储库中吗?
答案 0 :(得分:4)
嗯,我认为根据您的问题域和您选择的一般架构,答案是非常主观的。但是,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方法添加到货币存储库。那么,答案是 - 将您的购物车业务逻辑与货币存储库分离。这将允许您在以后更改货币存储库。
无论如何,正如我所说,你称之为服务或存储库是非常主观的。但总的来说,我认为服务是一种更高级别的abstration,可以在存储库中提供额外的逻辑和功能。
希望有所帮助。
答案 1 :(得分:1)
我相信埃文斯关于这个主题的前几段很清楚。
服务用于放置自然不适合任何特定域对象的逻辑。您的服务是否使用存储库并不重要 - 它是定义服务的行为逻辑。
不幸的是,服务是一个过载的术语 - 很容易让“ Web服务”和“域名服务”混淆。< / p>