我刚看到一些代码,他们有一个隐含的setter,但没有getter,例如:
public class Person {
//no getter!
public function set food(value:Food):void {
// do something with food.
this.processFood(value);
this.dispatchEvent(new Event(FoodEvent.EATEN));
}
}
这对我来说闻起来很糟糕。哈克。你觉得怎么样?
编辑:也许我的写作问题是,在我的经验中,属性通常是读/写,除非变量名称明显地显而易见,否则可能会令人困惑的是为什么属性是只写的。 / p>
答案 0 :(得分:4)
通常,OO设计中的仅设置属性没有任何问题。如果无法在构造函数中注入,则可以使用setter来实现依赖项注入。 Setters可以帮助您打破依赖周期。我会更进一步说,在其他环境中也只有set-only属性没有任何问题,但我知道这是一个有争议的问题。
在这种情况下,正如斯特凡所说,它确实应该被称为eatFood
。
答案 1 :(得分:2)
帮助您构建类的一个指导原则与您是否正在讨论由对象执行的动词/动作或描述它们的特征有关。通常通过方法最好地描述动作,而特性最好由属性描述。这段代码的问题不在于它使用的是set only属性,如上所述,它是完全有效的,但是它使用了一个应该使用方法的属性。