OOP设计 - 何时/何时验证属性?

JW.*_*JW. 16 php oop validation

我已经阅读了一些关于OOP DDD/PoEAA/Gang of Four的书籍,但它们似乎都没有涵盖验证的主题 - 似乎总是假设数据是有效的.

我从这篇文章(OOP设计问题 - 验证属性)的答案中收集客户端应该只尝试在域对象上设置有效的属性值.

这个人提出了一个类似的问题仍然没有答案:http://bytes.com/topic/php/answers/789086-php-oop-setters-getters-data-validation#post3136182

那么你如何确保它是有效的?每个吸气剂和二传手都有"验证方法"吗?

  • isValidName()
  • 的setName()
  • 的getName()

我似乎缺少一些关于OOP数据验证的关键基础知识 - 你能指点我一本详细介绍这个主题的书吗? - 即.涵盖不同类型的验证/不变量/处理反馈/使用例外与否等

Sar*_*raz 8

根据我的经验,验证发生在有人/用户输入的地方.这通常发生在你允许通过你的方法改变某些东西的地方.在您的示例中,我会去验证方法:

setName()
Run Code Online (Sandbox Code Playgroud)

所以它发生在允许输入值/设置值的地方,结果证明是setter方法.