Asp.net mvc ASP.NET MVC中的DDD、viewmodel和验证

Asp.net mvc ASP.NET MVC中的DDD、viewmodel和验证,asp.net-mvc,domain-driven-design,viewmodel,Asp.net Mvc,Domain Driven Design,Viewmodel,我正在开发我的第一个DDD应用程序,并试图遵循我在过去几个月里学习的一些基本规则 我已经用Nhibernate实现了存储库模式。 我原以为我可以将实体从控制器“移动”到视图,但很快我就意识到这几乎是不可能的 大多数人似乎更喜欢为每个视图定义特定的视图模型。 我并不特别喜欢重新定义我已经为实体创建的字段,但这似乎是唯一的方法 现在我面临的情况是,我想附加一些验证规则。 我原以为我可以将验证规则(带有数据注释)附加到实体上,但如果我使用的是viewmodel,它就无法工作 以下是问题: 验证不应该

我正在开发我的第一个DDD应用程序,并试图遵循我在过去几个月里学习的一些基本规则

我已经用Nhibernate实现了存储库模式。
我原以为我可以将实体从控制器“移动”到视图,但很快我就意识到这几乎是不可能的

大多数人似乎更喜欢为每个视图定义特定的视图模型。
我并不特别喜欢重新定义我已经为实体创建的字段,但这似乎是唯一的方法

现在我面临的情况是,我想附加一些验证规则。
我原以为我可以将验证规则(带有数据注释)附加到实体上,但如果我使用的是viewmodel,它就无法工作

以下是问题:

  • 验证不应该是域模型的一部分吗
  • 创建模型然后花时间在viewmodel上重新映射相同的字段(属性)不是很耗时吗
  • 如果它至少没有验证规则,这不是一个贫血模型吗? 我开始怀疑DDD是否真的适合中小型应用
我感谢任何帮助/建议

验证不应该是其中的一部分吗 领域模型

我认为它应该同时出现在域模型和视图模型上。viewmodels上的验证将检查有效的输入类型——datetime、decimal、int等,而域模型上的验证应检查特定于应用程序的规则。通过这种方式,即使您决定使用另一个UI,业务验证仍将存在,而UI将需要处理输入验证

创建一个 建模,然后花时间重新映射 上的相同字段(属性) 视图模型

有一些工具可以帮助您实现这一点,例如,在codeplex上。在我看来,这使得BLL和UI之间的分离更加清晰


虽然这种方法总体上更耗时,但它也更具可扩展性。如果您的应用程序将来需要增长,那么这是设计体系结构的合理方法

这个问题在这里已经被问了数百次,我已经回答了数百次(因此这使您成为第一百个也是第一个问这个问题的人:-):将用户验证逻辑放在视图模型上(如必填字段、日期时间格式等),并将业务验证逻辑放在实体上(用户名等内容已被使用,用户无法再在您的网站上购买产品,因为他已达到最大配额,…).

我想我们现在有数千个。你能给我们一个描述这种服务器端验证的主题/书籍的链接吗?我所看到的就是使用DataAnotation进行验证。保存对象时,我们是使用负责验证和持久化对象的新服务层,还是只有负责服务的层r端验证?谢谢!@ljaker,这将取决于您使用的验证框架。就我个人而言,我不太喜欢数据注释。我使用。对于数据库中已经存在的用户名等业务规则,不要期待奇迹:查询数据库并查看结果。谢谢您的回答,伙计们。我需要弄清楚我如何能够ut对我的域实体和我的viewmodel进行验证,并使其与MVC一起工作。如果你们中的任何人有一些参考资料,那就太好了。再次感谢。@vandalo,FluentValidation.NET与ASP.NET MVC配合得非常好:。还有一个:。就您的域模型而言,您可以在服务层调用验证。谢谢sTodor我在读有关automapper的书,我几乎被诱惑了,但我认为我的模型很简单,不会节省时间。