我正在开发我的第一个DDD应用程序,并尝试遵循我在过去几个月中研究过的一些基本规则。
我用Nhibernate实现了存储库模式 我以为我可以将我的实体从控制器“移动”到视图中,但很快我就意识到这几乎是不可能的。
大多数人似乎更喜欢定义特定于每个视图的视图模型 我并不特别想要重新定义我已经为我的实体创建的字段,但似乎这是唯一的方法。
现在我正面临着我想要附加一些验证规则的情况 我以为我可以将验证规则(使用DataAnnotations)附加到实体,但如果我使用的是viewmodel则它无法工作。
以下是问题:
我感谢任何帮助/建议。
答案 0 :(得分:6)
这已被问过数百次了,我已经回答了数百次(所以这让你成为第100位和第一个问这个问题的人:-)):将用户验证逻辑放在你的视图模型上(比如必填字段) ,日期时间格式,...)并将业务验证逻辑放在您的实体上(例如用户名已经被占用,用户无法再在您的网站上购买产品,因为他已达到最大配额,......)。 / p>
答案 1 :(得分:3)
验证不应成为其中的一部分 域模型?
我认为它应该在域模型和视图模型上。对viewmodels的验证将检查有效输入以键入--datetime,decimal,int等,而域模型上的验证应检查特定于应用程序的规则。通过这种方式,即使您决定使用其他UI,业务验证仍将存在,而UI将需要处理输入验证。
创建时间不是很费时间 模型,然后花时间重新映射 相同的字段(属性) 视图模型?
有些工具可以帮助您解决这个问题,例如,{code}上的automapper。在我看来,这导致了BLL和UI之间更清晰的分离。
虽然这种方法总体上更耗时,但它也更具可扩展性。如果您的应用程序将来需要增长,那么这是设计架构的合理方法。