【发布时间】:2012-06-13 18:05:22
【问题描述】:
在我的一个项目中,我使用的是 n 层架构
DAL (Repository Pattern) <-> BLL (POCO Services) <-> Web UI (ASP.NET MVC)
我创建了一个通用存储库,DAL 层一切正常。
在业务逻辑层中,我的服务方法的运行方式类似于(我喜欢使用的示例,因为 Pizza :)
myOven.Bake(myPizza);
尽管如此,我需要一些对象 myPizza 内部的特定信息,如下所示:
myPizza.GetBakeTime();
我知道,我可以使用类似的东西:
myOven.GetBakeTimeFor(myPizza);
可以计算出来,但是我不想把那个特定的逻辑放到myOven对象(这里是服务层)中,而是想把它包含在myPizza中,比如
public partial class Pizza
{
public double GetBakeTime()
{
// calculate Bake Time and return, based on other variables
}
}
我的意思是,扩展我的 ORM 生成的类并提供此功能。
我的问题:我知道,这在理论上是可以做到的,但是在将 Domain Logic 和 Business Logic 用于同一类时,我应该考虑什么?
【问题讨论】:
-
您需要查看 TDA(告诉不要问)。 myPizza.BakeIn(我的烤箱);将操作应用于获取行为的对象。
-
我的问题是不要选择你的方法而不是
myOven.Bake(myPizza);,我的问题是如果我同时提供域逻辑和存储库模式会怎样。 -
您的 DAL 数据结构不是您的域模型对象。有区别。要么使用不了解持久性的 ORM,要么不要混淆数据结构和域对象。
标签: repository-pattern n-tier-architecture