2012-06-13 202 views
0

在我的项目之一,我使用的是N层架构域逻辑和业务逻辑

DAL (Repository Pattern) <-> BLL (POCO Services) <-> Web UI (ASP.NET MVC) 

我创建了一个通用存储库,一切都是DAL层上的罚款。

业务逻辑层中

,我有我的服务方法,它的运作就像(我爱,因为比萨:)

myOven.Bake(myPizza); 

的使用,即使例如,我需要这是内部的一些具体信息对象myPizza,像这样:

我知道,我可以使用类似:

myOven.GetBakeTimeFor(myPizza); 

由此可以计算,但我不希望(这里的服务层)把那个特定的逻辑到myOven对象,相反,我想包括在myPizza,像

public partial class Pizza 
{ 
    public double GetBakeTime() 
    { 
     // calculate Bake Time and return, based on other variables 
    } 
} 

我的意思是,扩展我的ORM生成的类并提供此功能。

我的问题:我知道这可以在理论上完成,但是在同一个班级同时使用Domain LogicBusiness Logic时应该考虑到什么因素?

+0

你需要看看TDA(告诉别问)。 myPizza.BakeIn(myOven);该操作应用于GETS行为的对象。 –

+0

我的问题不是选择你的方法'myOven.Bake(myPizza);',我的问题是如果我提供域逻辑和存储库模式在一起。 –

+1

您的DAL数据结构不是您的域模型对象。有一个区别。要么使用持久性无知的ORM,要么不要混淆数据结构和域对象。 –

回答

1

域层应该只处理业务相关的功能。存储库处理数据的持久性。这两个有不同的目的,不应混合在一起。

此外,域层几乎是业务层。对于这个特定的例子,只需要烘焙时间,那么专门的查询存储库应该知道答案而不涉及域(因为它是预先计算的)。如果您想知道剩下多少时间进行烘焙,则服务(域的一部分)可以使用烤箱和披萨实体获取该值。

但是,这已经太具体了,可能并不适合您想要解决的实际问题。