Entity framework 我的域对象可以了解存储库和ServiceLayer吗?

Entity framework 我的域对象可以了解存储库和ServiceLayer吗?,entity-framework,architecture,service-layer,repository,Entity Framework,Architecture,Service Layer,Repository,我正在设计一个C#分层应用程序,我想知道我的域对象是否可以了解存储库和服务层 如果没有-如何解决复杂的函数,如Article.CalculatePrice()或Offer.CalculatePrice,它应该遍历所有项和summary Item.GetPrice() 顺便说一句,我用的是EF5 更新: 我的场景如下:我必须在一个不遵循任何可想象的规则和某种奇怪的价格计算场景的遗留数据库的基础上构建它: e、 g.我有一篇文章A{类型:窗帘,颜色:蓝色,尺寸:200cm},但没有在DB>中定义具体

我正在设计一个C#分层应用程序,我想知道我的域对象是否可以了解存储库和服务层

如果没有-如何解决复杂的函数,如Article.CalculatePrice()或Offer.CalculatePrice,它应该遍历所有项和summary Item.GetPrice()

顺便说一句,我用的是EF5

更新: 我的场景如下:我必须在一个不遵循任何可想象的规则和某种奇怪的价格计算场景的遗留数据库的基础上构建它:

e、 g.我有一篇
文章A{类型:窗帘,颜色:蓝色,尺寸:200cm}
,但没有在DB>中定义具体价格的文章,因此我必须查看所谓的
价格组
,哪些价格构建规则适用

例如,可能有以下适用于该物品的类别:

 - Article A { Type: Curtain, Color: Blue, Dimension: 200cm } <-- does not exist
 - PriceGroup { Type: Curtain, Color: Blue, Dimension: NULL, Price: -5 EUR (*relative* price) }
 - PriceGroup { Type: Curtain, Color: NULL, Dimension 200cm, Price 25 EUR (*absolute* price) }
-文章A{类型:窗帘,颜色:蓝色,尺寸:200cm}
它应该遍历所有项和摘要项。GetPrice()

如果您需要一个存储库来分别获取
,那么听起来您可能没有定义良好的聚合。理想情况下,
文章
提供的
聚合应该已经有了这些信息,并且能够在没有任何外部数据的情况下进行计算

如果需要一些外部数据(例如增值税税率),那么这种行为应该封装在一个。在这种情况下,可能是
ArticlePriceCalculator
OfferPriceCalculator
服务

更新 似乎您的旧数据库正在流入您的域中。这是需要避免的。保持域在普遍存在的语言方面“纯粹”,不要让数据库的性质影响您的域模型设计。一旦您有了一个精心设计的域模型来表达业务关注点(与数据库无关),然后您可以考虑从数据库中获取数据并将其输入模型的最佳方法。鉴于您有一个遗留数据库,我强烈建议使用一个。该层旨在为您美丽的域和丑陋的数据库提供一个屏障。数据库模式中的任何怪癖和怪癖都应该在此处处理,以便t不会影响域模型的设计

它应该遍历所有项和摘要项。GetPrice()

如果您需要一个存储库来分别获取
,那么听起来您可能没有定义良好的聚合。理想情况下,
文章
提供的
聚合应该已经有了这些信息,并且能够在没有任何外部数据的情况下进行计算

如果需要一些外部数据(例如增值税税率),那么这种行为应该封装在一个。在这种情况下,可能是
ArticlePriceCalculator
OfferPriceCalculator
服务

更新
似乎您的旧数据库正在流入您的域中。这是需要避免的。保持域在普遍存在的语言方面“纯粹”,不要让数据库的性质影响您的域模型设计。一旦您有了一个精心设计的域模型来表达业务关注点(与数据库无关),然后您可以考虑从数据库中获取数据并将其输入模型的最佳方法。鉴于您有一个遗留数据库,我强烈建议使用一个。该层旨在为您美丽的域和丑陋的数据库提供一个屏障。数据库模式中的任何怪癖和怪癖都应该在此处处理,以便t不会影响您的领域模型的设计。

I不,您应该在某种服务中解决此类问题“PriceGroup”是您的领域专家认可的术语吗?还是技术制造?术语“PriceGroup”“来自客户,最终客户必须每天使用该应用程序..不,您应该在某种服务中解决此类问题”“PriceGroup”“是您的领域专家认可的术语吗?还是一种技术虚构?术语”“PriceGroup”来自客户——最终,客户必须每天使用该应用程序。我更新了我的问题,以提供对我的问题的更多见解。我不确定如何设计此场景,而不需要了解任何东西,在我看来,这不应该是该特定领域的责任/关注点。感谢您的po告诉我正确的方向。有了这些信息,我的研究肯定会取得进展。我更新了我的问题,以提供对我的问题的更多见解。我真的不知道如何设计这个场景,而不知道几乎所有的事情,在我看来,这不应该是该特定领域的责任/关注。谢谢谢谢你为我指明了正确的方向。有了这些信息,我的研究一定能取得进展