美文网首页
成员变量的滥用

成员变量的滥用

作者: 囧书 | 来源:发表于2016-12-29 21:58 被阅读85次

    成员变量,或者说属性,能少用一个就少用一个。

    一个类刚开始设计写出来的时候,大多时候它是很单纯的,功能单一,更好听的说法应该是专一。但是越写越复杂时,它就容易被添加各种各样的变量,用来表达一个一个的状态或者暂存值。

    结果就是,为了维护它众多的变量,内部代码的耦合会非常严重,逻辑复杂,吃力不讨好。

    状态减少,运算量就会增加,但是这点牺牲是值得的。从代码的角度来看是用时间换空间,其实这里的好处并不是一两个变量存储空间的减少,而是程序更好维护了,换来的是漂亮的代码,健壮的程序。

    补充举例

    应评论里@Ikaros_vv 的要求, 简单举例说下。
    比如定义一个Rect,那么它必须要有的属性是origin和size,除此以外还有一个经常用到的属性center。
    假如为Rect添加一个变量center,那么每次改动origin和size时,都要修改center值以保持所有变量状态同步一致,而每次修改center时,也要同步修改origin和size。
    这种为Rect增加一个状态的方式,优点是在需要频繁读取center时会非常高效,但缺点是维护状态的成本太高,特别是以后再增加一个对center有影响的变量时,代码会变得复杂,很容易出错。
    假如只提供center的读写方法,而不存储它的值,就能对代码有非常大的改善。在swift里这也可以叫做计算属性。不存储center的话,origin和size这两个属性就完全不需要知道center的存在,随意修改而不用考虑由此造成的状态同步问题。
    这样,化双向的交叉耦合关系为单向清晰的关系,这虽然会增加每次读取center的运算量,但却保持了代码的轻耦合性,更容易维护扩展。

    相关文章

      网友评论

          本文标题:成员变量的滥用

          本文链接:https://www.haomeiwen.com/subject/pippvttx.html