如何在业务实体上封装业务逻辑?

时间:2015-08-13 21:43:04

标签: c# entity-framework 3-tier

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

在业务层:

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

在数据层:

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

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

1 个答案:

答案 0 :(得分:4)

使用这种类型的体系结构,最好创建包含所有业务逻辑的Interactors。这样你的域模型(例如User)可以非常轻量级。

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

服务交互器示例:

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

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

用例交互器示例:

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