我的领域模型中的任何给定实体都有几个需要强制执行的不变量——一个项目的名称必须至少有 5 个字符,某个产品必须存在才能与该项目相关联,截止日期不能早于当前日期和时间等
显然我希望客户端能够显示与验证相关的错误消息,但我不想在程序的几个不同层之间不断维护验证规则——例如,在小部件、 Controller 、应用程序服务或命令对象,以及域。另外,描述性错误消息似乎与表示相关,不属于领域层。我该如何解决这些难题?
最佳答案
我会创建与您预期的错误条件相关的特定异常。这是一般异常处理的标准,将有助于解决您的问题。例如:
公共(public)类 ProjectNameNotLongEnoughException : System.Exception
或
公共(public)类 DueDatePriorToCurrentDateException : System.Exception
在可能抛出异常的方法的 xml 注释中标记这些可能的异常,以便针对您的域模型编写的应用程序知道要注意这些异常,并能够在应用程序的表示中显示消息。这还允许您根据文化获得本地化的错误消息,而不会因为表示问题而弄乱您的域模型。
如果您选择执行客户端验证,恐怕您就不能吃蛋糕了。在这种情况下,您可能必须复制验证逻辑才能在维护架构的同时实现所需的功能。
希望这对您有所帮助!
关于validation - 如何避免在域层和应用层之间重复验证逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696995/