一
命令,不要去询问。
一个对象应该命令其它对象该做什么,而不是去查询其它对象的状态来决定做什么。
查询其它对象的状态来决定做什么也被称作‘功能嫉妒(Feature Envy)’。
二
if (person.getAddress().getCountry() == “Australia”) {
}
这违反了得墨忒耳定律,因为这个调用者跟Person过于亲密。
它知道Person里有一个Address,而Address里还有一个country。
它实际上应该写成这样:
if (person.livesIn(“Australia”)) {
}
三
好的面向对象编程是告诉对象你要做什么,而不是询问对象的状态后根据状态做行动。
数据和依赖这些数据的操作都应该属于同一个对象。