【问题标题】:Domain Logic and Business Logic领域逻辑和业务逻辑
【发布时间】: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 LogicBusiness Logic 用于同一类时,我应该考虑什么?

【问题讨论】:

  • 您需要查看 TDA(告诉不要问)。 myPizza.BakeIn(我的烤箱);将操作应用于获取行为的对象。
  • 我的问题是不要选择你的方法而不是myOven.Bake(myPizza);,我的问题是如果我同时提供域逻辑和存储库模式会怎样。
  • 您的 DAL 数据结构不是您的域模型对象。有区别。要么使用不了解持久性的 ORM,要么不要混淆数据结构和域对象。

标签: repository-pattern n-tier-architecture


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2011-08-01
    • 2012-05-27
    • 2014-02-24
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多