validation - 如何避免在域层和应用层之间重复验证逻辑?

标签 validation domain-driven-design dry code-duplication

我的领域模型中的任何给定实体都有几个需要强制执行的不变量——一个项目的名称必须至少有 5 个字符,某个产品必须存在才能与该项目相关联,截止日期不能早于当前日期和时间等

显然我希望客户端能够显示与验证相关的错误消息,但我不想在程序的几个不同层之间不断维护验证规则——例如,在小部件、 Controller 、应用程序服务或命令对象,以及域。另外,描述性错误消息似乎与表示相关,不属于领域层。我该如何解决这些难题?

最佳答案

我会创建与您预期的错误条件相关的特定异常。这是一般异常处理的标准,将有助于解决您的问题。例如:

公共(public)类 ProjectNameNotLongEnoughException : System.Exception

公共(public)类 DueDatePriorToCurrentDateException : System.Exception

在可能抛出异常的方法的 xml 注释中标记这些可能的异常,以便针对您的域模型编写的应用程序知道要注意这些异常,并能够在应用程序的表示中显示消息。这还允许您根据文化获得本地化的错误消息,而不会因为表示问题而弄乱您的域模型。

如果您选择执行客户端验证,恐怕您就不能吃蛋糕了。在这种情况下,您可能必须复制验证逻辑才能在维护架构的同时实现所需的功能。

希望这对您有所帮助!

关于validation - 如何避免在域层和应用层之间重复验证逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696995/

相关文章:

c# - 我是否应该使用 AutoFixture 来测试我的 Onion 的核心元素(它没有依赖项)?

ruby-on-rails - 嵌套(同时未嵌套)资源更好的方法

validation - 验证数据时抛出异常是好还是坏主意?

domain-driven-design - DDD : Where to create entity objects?

oop - DDD : Should 'country' be a Value Object or an Entity?

scala - 提升 Web 框架 DRY 调度

javascript - 在我的 jQuery 中重复函数,有更好的方法吗?

php - 如何使用面向对象技术验证 PHP 中的表单字段

css - HTML5 CSS 验证内容类型错误

asp.net - 正则表达式来验证 url