oop - 这种方法属于哪里?

标签 oop

假设我有一个从 UI 输入的模型地址。我必须验证地址永远不会以不完整的状态保存到系统中(无论这对业务意味着什么)。

当用户在 UI 中输入一个地址时,它会被序列化为一个 Address 对象。
所以我想知道:像“isComplete”这样的方法属于哪里?验证器还是模型?

如果我将该方法放入地址模型并调用 address.isComplete()在保存之前的验证器中,它意味着不完整的地址是一个有效的系统状态;如果我在验证器中进行完整性检查,感觉验证器对地址内部结构有太多了解。

我想知道,其他人遵循什么一般惯例?

编辑 :
正如下面有人提到的,在上面的例子中,地址对象在多个系统中被重用,一个系统中的“完整”对象可能并不意味着另一个系统中的“完整”对象。因此,没有一致的方法在全局范围内强制执行“永远不应在无效状态下构造对象”,因为无效状态是依赖于上下文的。

最佳答案

听起来您需要一个 AddressFactory,您可以在其中传递地址的数据,它会为您提供有效地址或错误(异常/无论如何)。您认为创建无效地址并不理想是正确的。

如果这样做,您应该确定谁可以创建 Address 对象,以及是否可以在不使用 AddressFactory 的情况下创建它们。如果是这样,那么 Address 对象本身需要防止无效输入,并且 Address 对象本身具有有效性检查的参数变得更强。

关于oop - 这种方法属于哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773811/

相关文章:

php - PDO:数据库凭证

Java 使用通用基础模型创建模型

java - 我的场景使用哪种设计模式?

ios - setUp() 方法在调用每个测试方法之前是如何调用的?

c# - 使用模板参数调用方法

delphi - 组件创建问题 : field ends up nil

java - 创建一个单独的对象并从 Java 中的对象引用编辑它

python - 使用实例属性作为字典值

oop - 在 Matlab 中设置对象的属性

java - 面向对象编程父子类