Function 属性/字段应该始终具有setter和getter方法,还是可以将它们组合起来?

Function 属性/字段应该始终具有setter和getter方法,还是可以将它们组合起来?,function,object,architecture,methods,Function,Object,Architecture,Methods,如果我有一个属性/字段为“firstName”和“lastName”的用户对象。使用firstName和lastName getter/setter设置和获取每个字段总是最好的,还是可以接受一个简单的“name”getter/setter?这在很大程度上取决于您计划使用这些变量的语言。在访问器(get)和变异器(set)都是手工编写的语言中,有很多方法可以处理这些函数 公共变量通常不受欢迎,但提供了使用和更改值的直接访问。人们可以支持或反对公共变量和受保护变量,但OOP中的普遍共识是您应该将数据

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

这在很大程度上取决于您计划使用这些变量的语言。在访问器(get)和变异器(set)都是手工编写的语言中,有很多方法可以处理这些函数

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

另一种解决变量访问问题的方法是返回一个引用,但与第一个示例一样,您的里程可能会有所不同。在提供直接访问方面有很多责任,其中很多责任直接落在用户的肩上。如果您计划让其他人(而不是您自己)使用这个类,那么给他们这样的访问权限并不特别安全

标准的
getName()
setName()
函数是处理它的最简单方法,并且提供了一种可以在不更改接口的情况下轻松更新的格式。一旦你的程序有了一个合适的规模,重构界面的变化就会变成一场噩梦。此路径允许您在不更改代码中任何其他内容的情况下执行函数

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

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

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

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

总的来说,您需要根据语言限制研究您的选项,并在做出决策之前计划如何使用变量。尽可能避免在开发中期重构。希望这有帮助

您好@joverboard,非常感谢您抽出时间写下如此详细的回复!我非常欣赏这些见解,并将考虑我将使用的平台的相关方法。你的例子确实有助于阐明你在写什么。干杯