使用代码优先迁移在不同层中复制POCO代码

时间:2016-11-08 18:52:50

标签: c# asp.net-mvc ef-migrations

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

我们的想法是让一个包含我的POCO实体的数据访问层全部用数据库模式类型项来装饰,比如字符串长度,外键不相关的东西,以及其他任何东西。该层还将充当将返回标量值,实体,聚合和IEnumebles的存储库。

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

顶部是表示层。该层与业务层进行通信,并且不了解数据层 - 它只能理解视图模型。我将仅使用视图模型在此层实现MVC模式。

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

  • 我最好在业务层中定义视图模型,还是在业务层中需要一组域模型,表示层可以知道并能够执行映射?
    • 另外一组域模型是否只是数据层中定义的模型的严重重复?

1 个答案:

答案 0 :(得分:2)

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

1)与所有图层分开拥有一组域模型,然后让所有图层引用它们。 优点:图层仍然是独立的,没有模型重复,不需要映射图层模型。 缺点:域模型的更改会影响所有层,例如数据库更改可能会破坏显示

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

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

P.S。 "定义业务层中的视图模型"是一个明确的禁忌。