0

如果我有一个带有属性/字段“firstName”和“lastName”的用户对象。最好使用 firstName 和 lastName getter/setter 设置和获取每个字段,还是可以接受简单的“name”getter/setter?

4

1 回答 1

1

这在很大程度上取决于您计划在哪种语言中使用这些变量。在访问器 (gets) 和修改器 (sets) 是手工写出并且本身不存在的语言中,有许多方法可以处理这些函数.

公共变量通常不受欢迎,但可以直接访问使用和更改值。人们可以支持或反对公共和受保护的变量,但 OOP 中的普遍共识是您应该将数据留给自己。由于您已经提到了 get/set,我们假设您不会这样做。

访问变量的另一种方法是返回引用,但与第一个示例一样,您的里程可能会有所不同。提供直接访问有很多责任,其中很多责任直接落在了用户的肩上。如果您打算让除您自己以外的其他人使用该课程,那么授予他们这样的访问权限并不是特别安全。

标准getName()setName()函数是处理它的最简单方法,并提供一种无需更改界面即可轻松更新的格式。一旦你的程序大小合适,重构界面更改可能会成为一场噩梦。这条路线允许您在不更改代码中任何其他内容的情况下执行功能。

在支持它的语言中,您可以编写重载函数,这些函数将根据语法决定是要检索数据还是更改数据。这遵循与标准 get/set 相同的基本思想,但是调用语法更类似于user.name("Joebob Peoplesmith")or name = user.name()。解决这个问题的方式因语言而异,能力也是如此。

最后,某些语言对以特定方式声明的变量具有内置访问权限。一个很好的例子是 Objective-C 的property,它可以与一个私有变量合成,以便作为一个 get/set 接口直接访问。在这种格式中,要访问NSString *m_pFirstName,您可以创建@property NSString *firstName然后@synthesize firstName = m_pFirstName. get/set 被隐式处理,user.firstName就好像它是一个局部变量一样。

至于结合您的名字和姓氏,这是个人选择,应该根据您是否想要/需要单独更改任何内容来决定。问你自己:

  • 我是否只需要更改名字或姓氏?
  • 我是否只需要访问名字或姓氏?
  • 我如何计划返回 firstName + lastName?(一个数组?一个组合字符串?)
  • 谁将使用这些功能?(其他开发人员?其他类?)
  • 这对新手来说是不言自明的吗?(易于理解?易于使用?“万无一失”?)
  • 有没有可以帮助我的数据结构?

总体而言,您需要根据语言限制研究您的选择,并在做出决定之前计划您将如何使用变量。尽可能避免重构中期开发。希望这可以帮助!

于 2012-06-05T15:28:57.767 回答