在属性设置器中添加逻辑是否被认为是不好的做法?


28

我跳入一个项目,发现其他开发人员在综合属性的设置器中添加了很多逻辑。我了解这是如何工作的,但我认为这很难理解程序的流程。在阅读代码时,每当看到时self.something = whatever,我总是检查somethingsetter是否被覆盖。

您对此主题有何看法?您认为这是体系结构不良或解决方案完善的标志吗?

如果您有相关的链接/源,我将很高兴阅读更多有关此的内容,很难获得良好的Google搜索结果,因此我也决定在此询问。

感谢您提供任何答案,并请注意,如果您没有看到标签,我在说的是目标C(即使我猜这不是特定于语言的问题)。


5
什么样的逻辑?例如,放置验证逻辑没有错。另一方面,用于调度一些事件,调用Web服务并更新UI的setter是完全错误的。
阿森尼·穆尔琴科

@MainMa我同意验证很好-也许也可以添加一些观察者,对吗?您能否举一些您认为更适合放入二传手的例子?
phi

的确,观察者是对的。至于适合二传手的事情,我让更多有经验的开发人员回答这个问题。
Arseni Mourzenko 2013年

Answers:


44

在属性设置器中添加逻辑是否被认为是不好的做法?

没有

发明了属性,使类设计人员可以将逻辑附加到方便的字段访问和分配接口上。

多少是太多了?这取决于班级的责任。以下是放入属性设置器中合理的一些内容:

  • 更新一些派生值
  • 通知观察者类状态已更改
  • 将更改传播到某些包含的对象
  • 将更改传播到后备存储
  • 执行验证

当类具有使该类可以做什么的显而易见的接口而无需使调用者考虑它的完成方式时,编程将变得更加容易。将逻辑放在属性设置器的后面,可以使类将其实现隐藏在一个简单的接口后面。对于某些类,不需要任何方法。只需通过设置属性来旋转旋钮,并通过获取属性来读取输出。


13
执行验证...
Robert Harvey

用setter重写方法重新加载collectionview或tableview有多好?
Krishnan

15

设置器通常用于更改对象的状态,而没有明显的副作用或繁重的计算;为此使用方法和功能。设置器实现的主要原因是更改并保持有效状态。因此,限制范围,设置请求重新计算的标志或调整相关属性绝对可以。


7

我不了解目标C,但是正如您所说的,对于任何OO语言来说,这似乎都是一个通用的问题。首先并且实际上与此相关的是,是否首先使用setter和getter是一个讨论的问题(在某些情况下,使用框架或库是合理的)。

我认为该方法的名称应解释该方法的作用以及所有方法的作用。此外,与该方法相关的文档应以更明确的方式对其进行描述。从这个意义上说,“ set” + {noun}形式的方法名称除了设置变量的值外,不应有任何副作用,并且应该是与之关联的唯一操作。检查参数是否有效是可以接受的,但应在其文档中进行说明。


1
为“是否有setter和getters” +1。而“方法名称应说明其功能”的另一个+1。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.