通过代码优先迁移在不同层复制 POCO 代码
Duplicating POCO code in different layers with code-first migrations
我有兴趣使用 entity framework - 新数据库的代码优先迁移,我有一些关于在数据和业务层复制 POCO 代码的 questions/concerns。
我的想法是拥有一个数据访问层,其中包含我的 POCO 实体,所有这些实体都装饰有数据库模式类型的项目,例如字符串长度、与外键相关的不能开箱即用的东西,以及其他任何东西。该层还将充当一个存储库,它将 return 标量值、实体、聚合和 IEnumerables。
在其之上是业务层,它将处理与存储库的对话,以及一系列业务逻辑。
最上面是表示层。该层与业务层对话,对数据层一无所知——它只了解视图模型。我会在这一层实现 MVC 模式,只使用视图模型。
我 运行 遇到的问题与我应该在哪里进行视图模型和数据模型之间的映射有关。如果我在表示层中定义视图模型,业务层将不知道它们存在。
- 我是在业务层中定义视图模型更好,还是在业务层中需要一组域模型,表示层会知道并能够执行映射?
- 额外的一组域模型是否只是数据层中定义的模型的严重重复?
根据项目的范围,我通常使用以下两种方法之一:
1) 有一组与所有层分开的域模型,然后让所有层引用它们。
优点:图层仍然是独立的,没有模型重复,不需要映射图层模型。
缺点:领域模型的变化会影响所有层,例如数据库更改可能会破坏显示
2) 每层都有模型。业务层将自己的模型映射到数据层的模型,表示层将自己的模型映射到业务层的模型
优点:每一层都做一件事,底层模型的变化不会通过层传播
缺点:可能会出现模型重复,需要维护映射
第一种方法最适合小型应用程序和 "direct updates" 场景,第二种方法更适合具有多个移动组件的大型项目。
P.S。 "defining the view models in the business layer" 绝对不能。
我有兴趣使用 entity framework - 新数据库的代码优先迁移,我有一些关于在数据和业务层复制 POCO 代码的 questions/concerns。
我的想法是拥有一个数据访问层,其中包含我的 POCO 实体,所有这些实体都装饰有数据库模式类型的项目,例如字符串长度、与外键相关的不能开箱即用的东西,以及其他任何东西。该层还将充当一个存储库,它将 return 标量值、实体、聚合和 IEnumerables。
在其之上是业务层,它将处理与存储库的对话,以及一系列业务逻辑。
最上面是表示层。该层与业务层对话,对数据层一无所知——它只了解视图模型。我会在这一层实现 MVC 模式,只使用视图模型。
我 运行 遇到的问题与我应该在哪里进行视图模型和数据模型之间的映射有关。如果我在表示层中定义视图模型,业务层将不知道它们存在。
- 我是在业务层中定义视图模型更好,还是在业务层中需要一组域模型,表示层会知道并能够执行映射?
- 额外的一组域模型是否只是数据层中定义的模型的严重重复?
根据项目的范围,我通常使用以下两种方法之一:
1) 有一组与所有层分开的域模型,然后让所有层引用它们。 优点:图层仍然是独立的,没有模型重复,不需要映射图层模型。 缺点:领域模型的变化会影响所有层,例如数据库更改可能会破坏显示
2) 每层都有模型。业务层将自己的模型映射到数据层的模型,表示层将自己的模型映射到业务层的模型 优点:每一层都做一件事,底层模型的变化不会通过层传播 缺点:可能会出现模型重复,需要维护映射
第一种方法最适合小型应用程序和 "direct updates" 场景,第二种方法更适合具有多个移动组件的大型项目。
P.S。 "defining the view models in the business layer" 绝对不能。