【问题标题】:How to encapsulate business logic on business entities?如何在业务实体上封装业务逻辑?
【发布时间】:2015-11-07 01:16:11
【问题描述】:

在 3 层应用程序中,我使用我的业务实体在我的 dbContext 上生成 dbSets

在业务层:

public class User
{ 
   string name {get;set;}
}

在数据层:

public context:DbContext
{
  public DbSet<User> Users {get;set;}
}

然后我的问题是如何在实体上封装逻辑?我可以使用扩展方法,但我也想要一些属性,我不希望它们泄漏到领域层之外。

【问题讨论】:

  • 我正在使用我的业务实体在我的 dbContext 上生成 dbSet 呃……什么?您最好在代码中显示一个示例案例。这个问题永远不会只用文字。

标签: c# entity-framework 3-tier


【解决方案1】:

使用这种类型的架构,最好创建包含所有业务逻辑的交互器。这样您的域模型(例如用户)可以非常轻量级。

创建交互器有两种常用方法。一种方法是创建一个服务对象。该服务可以提供所有用例并执行所有业务逻辑。这种方法更适用于简单的领域模型和中小型应用程序。

服务交互器示例:

public class UserService
{
    public void ChangeUsername(User user, string name)
    {
        ... business logic ...
    }
}

另一种封装业务逻辑的常用方法是为每个用例创建一个对象。每当您添加新操作时,只需创建一个新类。这需要更多的初始工作和更好地掌握企业架构,但会产生一个非常可扩展的解决方案。

用例交互器示例:

public class ChangeUsernameOperation
{
    public void ChangeUsernameOperation(User user, string name)
    {
        ... business logic ...
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2013-11-29
    • 2021-02-14
    相关资源
    最近更新 更多