
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了软件开发单一职责原则的一些基础知识以及用法等内容,而本文我们就继续来学习一下,软件开发开闭原则概念与注意事项。
开闭原则(OpenClosedPrinciple,OCP)是指添加一个新的功能,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。
注意,没必要纠结某个代码改动是“修改”还是“扩展”,更没必要太纠结它是否违反“开闭原则”。只要没有破坏原有代码和单元测试的正常运行,就可以说,这是一次合格的代码改动。
不过,有些修改是在所难免的,是可以被接受的。尽量让修改操作更集中、更少、更上层,尽量让核心、复杂的那部分逻辑代码满足开闭原则。
偏向顶层的指导思想:多花点时间思考,这段代码未来可能有哪些需求变更、如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,不改动代码整体结构、做到小代码改动的情况下,新的代码能够很灵活地插入到扩展点上,做到“对扩展开放、对修改关闭”。
实际上,多态、依赖注入、基于接口而非实现编程,以及抽象意识,说的都是同一种设计思路:提升代码扩展性,只是从不同的角度、不同的层面来阐述而已。
基于接口而非实现编程的设计初衷是,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。要遵从该原则,需要做到下面这3点。
(1)函数的命名不能暴露任何实现细节。比如,uploadToAliyun()就不符合要求,改为更加抽象的命名方式:upload()。
(2)封装具体的实现细节。例如对上传(或下载)流程进行封装,对外提供一个包裹所有上传(或下载)细节的方法,给调用者使用。
(3)为实现类定义抽象的接口。使用者依赖接口,而不是具体的实现类来编程。
如何在项目中灵活运用OCP:
(1)对于一些比较确定的、短期内可能就会扩展,或者需求改动对代码结构影响比较大的情况,或者实现成本不高的扩展点,在编写代码的时候,就可以事先做些扩展性设计。
(2)但对于一些不确定未来是否要支持的需求,或者实现起来比较复杂的扩展点,可以等到有需求驱动的时候,再通过重构代码的方式来支持扩展的需求。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。