通过代码优先迁移在不同层中复制POCO代码

本文关键字:代码 复制 POCO 迁移 | 更新日期: 2023-09-27 18:17:03

我对使用实体框架-代码优先迁移与新数据库感兴趣,并且我对在数据层和业务层复制POCO代码有一些问题/担忧。

这个想法是有一个包含我的POCO实体的数据访问层,所有的POCO实体都用数据库模式类型的项目装饰,比如字符串长度,外键相关的东西,不能开箱即用,以及其他任何东西。这一层还将充当一个存储库,它将返回标量值、实体、聚合和IEnumerables。

上面是业务层,它将处理与存储库的通信,以及一堆业务逻辑。

最上面是表示层。这一层与业务层对话,不了解数据层——它只了解视图模型。我将在这一层实现MVC模式,只使用视图模型。

我遇到的问题与我应该在哪里做我的视图模型和我的数据模型之间的映射有关。如果我在表示层中定义视图模型,业务层将不知道它们的存在。

  • 是在业务层定义视图模型更好,还是需要在业务层中定义一组域模型,以便表示层知道并能够对其执行映射?
    • 一组额外的领域模型是否只是数据层中定义的模型的过分复制?

通过代码优先迁移在不同层中复制POCO代码

根据项目的范围,我通常使用以下两种方法之一:

1)从所有层分离出一组领域模型,然后让所有层引用它们。优点:层仍然是独立的,没有模型复制,不需要映射层模型。缺点:领域模型的改变会影响所有层,例如DB的改变可能会破坏显示

2)每层都有模型。业务层将自己的模型映射到数据层的模型,表示层将自己的模型映射到业务层的模型优点:每一层只做一件事,底层模型的变化不会通过层传播缺点:很可能存在模型的重复,并且需要维护映射

第一种方法最适用于小型应用程序和"直接更新"场景,第二种方法更适用于具有多个移动组件的大型项目。

注:"在业务层定义视图模型"是绝对不允许的。