结构化编程强调单一出口的原则,其目的在于增强函数流程的逻辑性。本身这个原则有些过于死板,但其保持代码逻辑性的目的是非常正确的。在面向对象设计,我们都知道要遵循单一职责原则(SRP),而函数也应遵循这一原则,以保证函数体逻辑的清晰并且高内聚。
以下示例中,UpdateValue函数与下面m_value的赋值语句造成了逻辑的分散:
当需要变更m_value的赋值逻辑时,往往会修改UpdateValue函数,而忽略了下面的赋值语句,这就会引起新的问题。顾此失彼嘛!
这种情况在代码维护时最容易引入。我们解Bug时,如果只是头疼医头,脚疼医脚,就容易留下一个个补丁,而每个补丁就可能是一个个逻辑碎片。
这样的分散的逻辑会加重维护的成本和风险。为了减少这种风险,首先在设计时和解Bug时要努力保持逻辑的一致性。遇到问题,不是将问题掩盖起来,而是要实实在在的解决它。不要形成破窗,使得风险不断累积。请参考<<如何有效地解Bug (RED方法) >>
在上图的例子中,应当尽量将下面的赋值语句移入UpdateValue函数中,这样将UpdateValue视为m_value的经纪人,统一管理m_value的值的设定。当然,也许m_value所依赖的条件可能分散于各处,这是可以提供较低层次的函数来形成m_value的赋值入口,比如setValue(…)。这就是setter/getter的概念了。
总之,当设计一个函数时就要明确它的职责,让相关的事务放到内部处理,而不是分散各处。当发现逻辑碎片产生时,应当及时加以清除,以免扩散到影响系统的维护。
转载请注明出处:http://blog.csdn.net/horkychen
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。