使用带参数的构造函数来初始化类的成员或者使用setter函数间接地执行它是否更好?到目前为止,我对这个问题没有得到明确的答案.任何见解将不胜感激.
这几乎肯定是设计选择或有时风格的问题.我会考虑很多事情:
构建一个没有设置成员变量的对象会使该类处于无效状态吗?如果是这样,您将需要构造函数为这些成员获取有效值.否则,您应该能够提供有用的默认值.
设置变量的个别成员会违反类不变量吗?如果是这样,他们就不应该拥有自己的制定者.
此类用户是否可能想要修改个别成员?如果是这样,那么setter可能是合适的.
能够改变对象的个别成员是否具有概念意义?我认为能够改变Person出生日期是没有意义的.但是,你可以说改变一个Person人的名字确实有意义.这取决于.您是否认为您Person的名称已更改为Person您的系统中的其他名称?
你可以将setter组合在一起更有用吗?取而代之的Rectangle::setX(int)和Rectangle::setY(int),做Rectangle::setPosition(int,int)更有意义?也许甚至Rectangle::setPosition(Point)更好.
在任何情况下,通过个人设定者和吸气剂暴露其全套成员的类通常是代码气味.