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

RSi*_*ara 1 c# entity-framework 3-tier

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

在业务层:

public class User
{ 
   string name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在数据层:

public context:DbContext
{
  public DbSet<User> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

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

Sil*_*gel 5

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

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

服务交互器示例:

public class UserService
{
    public void ChangeUsername(User user, string name)
    {
        ... business logic ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

用例交互器示例:

public class ChangeUsernameOperation
{
    public void ChangeUsernameOperation(User user, string name)
    {
        ... business logic ...
    }
}
Run Code Online (Sandbox Code Playgroud)