我正在设计一个 C# 分层应用程序,我想知道我的域对象是否可以了解存储库和 ServiceLayer。
如果不是 - 我如何解决像 Article.CalculatePrice() 或 Offer.CalculatePrice 这样的复杂函数,恕我直言,它们应该遍历所有项目并汇总 Item.GetPrice()。
我正在使用 EF5 顺便说一句。
更新: 我的场景如下:我必须在不遵循任何可以想象的规则和某种奇怪的价格计算场景的遗留数据库之上构建它:
例如,我有一个Article A { Type: Curtain, Color: Blue, Dimension: 200cm }
,但没有在数据库中定义特定价格的文章 -> 所以我必须查看所谓PriceGroups
的哪些价格构建规则适用。
例如,可能有以下组适用于该文章:
- 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) }
问题是:PriceGroup 和 Article 不能以任何方式聚合,并且价格组不是分层对齐的,而是按规范应用的。
所以:恕我直言,ArticlePriceService 必须知道 PriceGroups,因此如果找不到 ArticlePrice,它必须返回从组计算的价格。所以,如果我把这整个东西装进一个域对象中,我的 ArticleDO 就必须知道 ArticlePriceService,它必须知道 PriceGroupService?
我真的很困惑如何解决这个问题。请尝试提供一个例子或我..