【发布时间】:2019-03-02 05:05:53
【问题描述】:
这个问题可能会被问一千次,但答案中有很多混乱和矛盾。
我在域驱动设计的背景下询问验证。
- 应该主要在哪一层进行验证?
- 对象处于无效状态是否可以接受?因为很多回答说没关系,主要是因为历史数据,业务规则可能会随着时间的推移而变化,加载历史数据可能会导致问题?
- 尽管 Martin Fowler 建议 Replacing Throwing Exceptions with Notification in Validations,但许多实现都考虑在域层中抛出异常并将消息映射到 UI!何时返回消息以及何时在验证上下文中抛出异常?
许多文章在他们的文章中解释了一些提示或路径,例如 Vladimir Khorikov 和 jbogard,但在 cmets 中,他们承认他们现在做事略有不同。这些模式仍然有效吗?
我应该使用像FluentValidation 这样的框架吗?如果我使用它,这个框架是否仅在应用程序层中使用,作为
MVC annotations的替代品?- 什么时候应该改用
Business Rule Framework (BRF)?
我在这里知道很多问题,但它们针对的是同一个问题(DDD 中的验证)。
注意:我不使用CQRS 模式,因为它使应用程序变得如此复杂。
所以我有(domain layer,data layer, application layer(MVC), and shared kernel)
【问题讨论】:
-
也许question & answer 会有所帮助。
-
@plalx 这是一个非常棒的答案,但它回答了我的部分问题,如果你能帮助我回答我的问题,我将不胜感激。
标签: asp.net-mvc validation design-patterns domain-driven-design enterprise