【发布时间】:2016-11-08 18:52:49
【问题描述】:
我对使用实体框架感兴趣 - 使用新数据库进行代码优先迁移,我对在数据和业务层中复制 POCO 代码有一些疑问/疑虑。
这个想法是有一个数据访问层,其中包含我的 POCO 实体,所有这些都用数据库模式类型项进行装饰,例如字符串长度、与开箱即用的外键相关的东西,以及其他任何东西。该层还将作为一个存储库,返回标量值、实体、聚合和 IEnumerables。
上面是业务层,它将处理与存储库的对话,以及一堆业务逻辑。
顶部是表示层。该层与业务层对话,对数据层一无所知——它所理解的只是视图模型。我将在这一层实现 MVC 模式,只使用视图模型。
我遇到的问题与我应该在哪里进行视图模型和数据模型之间的映射有关。如果我在表示层中定义视图模型,业务层将不知道它们的存在。
- 我是在业务层中定义视图模型更好,还是我需要业务层中的一组域模型,表示层会知道并能够对其执行映射?
- 额外的一组域模型是否会严重重复数据层中定义的模型?
【问题讨论】:
-
模型必须位于客户端和业务层都可以引用的地方。这样,它们就充当了两层之间的数据契约。您可以让业务层以您认为合适的方式与 DAL 交互,并始终将商定的数据合同返回给客户端。这意味着您的模型与您的视图和控制器位于一个单独的项目中。
-
我曾想过 - 在我的 MVC 项目中拥有一个空模型文件夹似乎很奇怪,但也许这只是我需要克服的问题。我希望了解其他我不知道存在的选项:)
-
你确定业务逻辑应该引用视图模型吗?
-
我不敢说实话。希望能感受一下其他人的经验。将视图模型交给表示层的想法听起来不错,但我想知道是否有可能遇到的陷阱。
标签: c# asp.net-mvc entity-framework-migrations