我一直在阅读一些关于异常及其使用的问题和答案。似乎是一种强烈的观点,即只应针对异常、未处理的情况提出异常。所以这让我想知道验证如何与业务对象一起工作。
假设我有一个带有 getter/setter 对象属性的业务对象。假设我需要验证该值是否在 10 到 20 之间。这是一个业务规则,因此它属于我的业务对象。所以这对我来说似乎意味着验证代码在我的设置器中。现在我将 UI 数据绑定到数据对象的属性。用户输入5,所以规则需要失败,不允许用户移出文本框。. UI 是数据绑定到属性的,因此将调用 setter、检查规则并失败。如果我从我的业务对象中提出一个异常说规则失败,那么 UI 会接受它。但这似乎与异常的首选用法背道而驰。鉴于它是一个二传手,你真的不会有二传手的“结果”。
那么验证应该如何工作呢?
编辑:我可能在这里使用了一个过于简单的例子。像上面的范围检查这样的事情可以由 UI 轻松处理,但如果验证更复杂,例如业务对象根据输入计算一个数字,如果计算出的数字超出范围,它应该被拒绝。这是更复杂的逻辑,不应该出现在 UI 中。
还考虑基于已输入的字段输入的进一步数据。例如,我必须在订单上输入一个项目以获得某些信息,如现有库存、当前成本等。用户可能需要此信息来决定进一步输入(例如要订购多少个单位),或者可能需要它来订购以进行进一步验证。如果项目无效,用户是否应该能够输入其他字段?重点是什么?