函数和对象的关系
之前讨论了类型和对象之间的区别,这次讨论函数和对象的关系,和 OO 相关的函数有何不同?
函数也分很多种,认识到这一点,并区别对待,是成熟编程的标志.
独立函数:可以被 mod/namespace 这些限定访问范围,一个函数没想好附属的类型和对象,可以先放这;
类型附属函数:只做类型自己的一些计算;
对象关系函数:对象间的逻辑计算,有主客体之分,一般附属在主体上。可见影响代码质量的是操作对象的函数。
对象函数的槽点 1: 只加不减。
对象间的依赖关系应该够用即可,如果碰到需要添加的情况,更好的做法是定义新对象及新的函数。当老对象无人依赖时,可以放心的删掉。
这点契合了“只读”原则,当需要修改对象定义时,新增对象总好过修改旧对象。
对象函数的槽点 2: 循环依赖。
尤其是随意添加回调函数时,为了图省事,quick dirty 式的修改;
这时先用依赖倒置定义个新的接口来解除循环,变成单向依赖,然后再考虑接口的附属对象。
最后依赖倒置一般发生在分层、Core/Plugin 的地方,这时需要认真考虑,给出稳定不变的接口设计。
之前说过,原则是软件界的公理;那依赖倒置相关的接口定义,就是软件界的定理。所以,梳理对象函数时,重中之重是找出会循环依赖的关系,然后使用依赖倒置使之解耦,进一步通过框架固定下来;剩下的对象函数就都是单向依赖,提供周边功能;最后是类型函数这类纯函数。
至此,原则 Top3 均已提及:只读、开闭、依赖倒置。如能贯彻落实,软件将健康生长。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/a392b9ac4e3125cf391eaf373】。文章转载请联系作者。
评论