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

标签 c# entity-framework 3-tier

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

在业务层上:

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


在数据层上:

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


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

最佳答案

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

创建交互器有两种常用方法。一种方法是创建一个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 ...
    }
}

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

相关文章:

c# - 可以将条件 LINQ 查询组合成一个每次运行的查询吗?

c# - ObjectContext正在泄漏分离实体的内存

architecture - 领域驱动设计中的层

wcf - 如何在 MVC5 WCF 中实现三层架构

data-access-layer - 数据库抽象层和数据访问层有什么区别?

c# - C# 桌面应用程序的数据库引擎

javascript - 当用户单击缩略图 ASP.NET 时,如何显示完整图像

entity-framework - Entity Framework 代码优先方法出错:“The underlying provider failed on Open”

c# - 如何保持选中的项目? - 列表显示

c# - 打开C :\windows\assembly\gac_msil from C#