在分层应用程序中,将实体定义在共享层中是一个好的做法吗?我想,我将在所有层中使用它们。还是它们属于业务层?
MSDN的分层应用指南 将业务实体放在业务层中
该 .NET的分层架构示例 将实体放在共享层中
可以这样吗?
还是要这样
该怎么做,为什么?
我通常按以下结构组织项目。
业务层
DAL数据访问层
我想说,这取决于这些实体是否包含业务逻辑。
从《分层应用指南》中 。
业务实体还可以验证实体中包含的数据,并封装业务逻辑,以确保一致性和 执行业务规则和行为.
与此形成鲜明对比的是 分层架构解决方案指南 似乎依靠代码生成来创建实体,它们只是数据容器,几乎没有任何逻辑。
丰富的领域实体 倾向于不在一个共享模块中,因为这意味着你不希望每个人都有大量的行为(想象一下能够在客户端直接操作业务逻辑...)。贫乏的则相反,它们是轻量级的,可能会被愉快而方便地分发到各地。
我的方法有一点不同。在数据层,我存储了所有的实体,在共享层,我有DTO对象(Domain Transfer Objects),它们是实体的精确拷贝,但没有实体框架控制。为了相互映射,我使用了映射器(AutoMapper),很流畅,很容易使用。
我不明白为什么Entity Framework不支持接口,只用实例。