繁体   English   中英

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

[英]Duplicating POCO code in different layers with code-first migrations

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

这个想法是要有一个包含我的POCO实体的数据访问层,所有这些实体都装饰有数据库模式类型的项目,例如字符串长度,与外键相关的东西,这些东西开箱即用,等等。 该层还将充当存储库,该存储库将返回标量值,实体,聚合和IEnumerable。

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

最顶层是表示层。 该层与业务层进行通信,并且对数据层一无所知–它只了解视图模型。 我将仅使用视图模型在这一层上实现MVC模式。

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

  • 我最好在业务层中定义视图模型,还是在业务层中需要表示层可以识别并能够执行映射的一组域模型?
    • 一组额外的领域模型是否只是数据层中定义的模型的惊人复制?

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

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

2)每层都有模型。 业务层将其自身的模型映射到数据层的模型,表示层将其模型映射到业务层的模型优点:每一层都做一件事,基础模型中的更改不传播到层上缺点:可能重复模型并且映射需要维护

第一种方法最适合较小的应用程序和“直接更新”方案,第二种方法在具有多个移动组件的大型项目中效果更好。

PS“在业务层中定义视图模型”绝对是不行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM