【问题标题】:Is Entity Framework Dataannotations bad for DDD and separation of concerns?实体框架数据注释对 DDD 和关注点分离不利吗?
【发布时间】:2012-10-06 21:45:05
【问题描述】:

我现在已经工作了很长时间来学习如何实现 DDD、IoC 并确保我的应用程序中存在关注点分离。我也在尝试进入测试优先开发的方式。

不知何故,实体框架给医学带来了一些麻烦。我有一个域项目来保留我的域对象(其中许多现在是 POCO 类,但有一些行为)。这是遗留代码,我尝试对其进行重构,但 MVC 在很大程度上依赖于 Dataannotations 进行验证。

datavalidation-attributes 设置在域对象上,将它们与实体框架联系起来。大多数关于 EF 的教学视频和文档也使用了域对象的许多属性。

所以我想知道这真的是一件好事吗?

我喜欢许多属性的想法,但是将它们放在域对象上的结果让我觉得实体框架是应用程序的核心,而不是域对象。

您对解决这个问题有什么建议吗,或者应该是这样吗?

更新:

下面的建议答案将我引向Ladislav Mrnka 回答的这篇文章

对我来说,如果它解决了我的问题,这听起来可能是最好的方法。他还指出了我在域层中的属性遇到的同样问题。

【问题讨论】:

  • 是的,Ladislav 关于使用 View 模型的回答是正确的。您不应该混合您的域和表示逻辑。

标签: c# asp.net-mvc entity-framework entity-framework-4 domain-driven-design


【解决方案1】:

Code First Fluent API Validations 你感觉好点了吗?

【讨论】:

  • 是的,我愿意。不知道我可以将验证规则放在流畅的 API 中。然而,仍有相当多的客户端验证无法识别这一点。也许我可以在视图模型上使用验证注释?我得去看看。
  • 这取决于您的应用程序。我所做的应用程序在大多数表单中都使用了 ajax。我只是使用了服务器端验证,但感觉就像是客户端验证。结合本地化进行客户端验证,我从来都不是很幸运。
  • 好吧,UI 也是遗留的,有些是 ajax 而有些不是。但是,我有可能改变这一点。无论如何,服务器端验证是必须的,所以我会将验证放在 EF 的 Fluent APi 中,但我也会使用 ViewModels 并在其中放置注释。
【解决方案2】:

一些属性与 EF 和 MVC 相关 - 描述您的类的属性。必填字段,最小和最大长度等...如果您真的想分离所有内容,我会将这些属性保留在您的域对象上,将数据库内容(外键等)放入 FluentAPI 和 MVC 内容(显示名称等...)在视图模型上。

如果 MVC 4 恰好支持 FluentAPI(我使用的是 MVC 3,它不支持,不知道 4),你绝对应该使用它。

【讨论】:

  • 我现在正在迁移到 mvc 4,但我自己还没有检查过。如果是,那我就放在那里。我可以同意,只要属性描述类而不是键,与数据库相关的外键就不是大问题。我只是觉得如果我更改 EF 或那里的某些更改,我不应该需要在我的域层中进行更改。这似乎是一个糟糕的设计......
猜你喜欢
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多