如果我有一个User对象,其属性/字段'firstName'和'lastName'。使用firstName和lastName getter / setter来设置和获取每个字段总是最好的,还是可以接受一个简单的'name'getter / setter?
答案 0 :(得分:1)
这在很大程度上取决于你计划使用这些变量的语言。在访问者(获取)和mutators(集合)是手工写出并且本身并不存在的语言中,有很多方法可以处理这些功能。
公共变量通常不赞成,但提供直接访问权限以使用和更改值。人们可以争论或反对公共和受保护的变量,但OOP中的普遍共识是您应该将自己的数据保留给自己。既然你已经提到了get / set,我们假设你不会这样做。
解决变量访问权限的另一种方法是返回参考,但与第一个示例一样,您的里程可能会有所不同。提供直接访问有很多责任,其中很多都直接留在用户的肩上。如果你打算让其他人在你这个班级工作,那么给他们这样的访问并不是特别安全。
标准 getName()
和 setName()
函数是处理它的最简单方法,并提供可在不更改界面的情况下轻松更新的格式。一旦你的程序大小合适,重构界面的变化就会成为一场噩梦。此路线允许您在不更改代码中的任何其他内容的情况下执行功能。
在支持它的语言中,您可以编写重载函数,它将根据语法决定您是要检索数据还是更改数据。这遵循与标准get / set相同的基本思想,但调用语法更类似于user.name("Joebob Peoplesmith")
或name = user.name()
。解决这个问题的方式因语言和语言而异。
最后,某些语言对以某种方式声明的变量具有内置访问权限。一个很好的例子是Objective-C的property
,它可以与私有变量合成,作为get / set接口直接访问。在此格式中,要访问NSString *m_pFirstName
,您可以创建@property NSString *firstName
,然后创建@synthesize firstName = m_pFirstName
。 get / set由user.firstName
隐式处理,就像它是一个局部变量一样。
至于组合firstName和lastName,这是个人选择,应根据您是否希望/需要单独更改任何内容来决定。问问自己:
总的来说,您需要根据语言限制研究您的选项,并在做出决策之前计划如何使用变量。如果可能的话,避免重构中期开发。希望这有帮助!