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

标签 c# entity-framework 3-tier

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

业务层:

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

在数据层上:

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

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

最佳答案

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

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

服务交互器示例:

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

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

用例交互器示例:

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

关于c# - 如何在业务实体上封装业务逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998934/

相关文章:

java - Oracle JDBC 教程 - 想要了解 2 层 JDBC 与 3 层

asp.net - bll、dal 和接口(interface)实现

c# - VS2012 Sort Usings 不会先移动 System Usings?

c# - 如何为 Xamarin 表单标签添加边框?

c# - WCF NetTcpBinding - 来自 Microsoft 教程 - 超时

c# - 使用 OnAsyncPostBackError 比 Page_Error 有什么优势

java - Hibernate 集合中的并发修改

entity-framework - Automapper 缺少类型映射配置或不支持的映射

c# - FindAsync 返回最近的 1000 个结果

design-patterns - 你们有多少人做三层设计?