课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
易扩展性是随着互联网的不断发展而提出的一个软件开发需求,而要实现易扩展就需要用到开放关闭原则,下面我们就通过案例分析来了解一下,这个原则会用在哪些场景中。
1、信息流
大部分的内容型App、网站都具有一个特定页面或者模块用于信息流的展示,有时候甚至就是页。那么这些信息流有什么特点呢?其实与画形状一样——无论是通过推荐算法也好,还是按序读取也好,终到前端的,通常就是一个列表罢了,而不同点,则在于这些列表项本身的数据类型,它们或许需要有不同的展示风格来达到不同的视觉目的,甚至可能需要和广告列表合并。这样一来,这些数据项便是前面例子中的“形状”,而整个信息流的读取便是drawShapes。
2、聊天室
其实聊天室与信息流很相似,都是按序展示列表里的信息,在这里提及是因为笔者正好曾在同事的相关业务逻辑中看到过用switch-case来进行不同种类消息渲染,当时这块儿功能的代码占了整个应用的30%左右,并且功能性BUG层出不穷,维护起来又非常麻烦。在随后的改版中,笔者与同事一起设计并采用了更加OCP的方案,整体代码量减少了近一半(当然也包含许多细节的优化),重要的是,一期测过后,直到新的相关需求提出,这块功能都没有再报过功能性BUG,同时新需求的开发从一连串的依赖项修改变为了新增一个用于编写新组件的文件,之后只需在适当的地方注册即可。
3、跨平台框架
近年来,跨平台应用程序框架层出不穷,其中React与Flutter在跨移动平台这一领域尤为耀眼。而这两者实际上在架构上都有一个共同点,即基于顶层抽象来实现不同平台的具体实现,如图所示:
在这个架构下,扩展一种平台的思路便是:
确认该平台支持React(JS)或Flutter(Dart)顶层抽象的行为
如果支持,实现该平台的渲染方式
由于各平台的实现都依赖于顶层抽象(又cue到DIP),在这样的情况下,修改顶层代码用牵一发而动全身来形容是完全不过分的,因此其迭代需要非常谨慎——前面说应当对这样的代码关闭修改权,为什么这里又说迭代要谨慎呢?
很简单,因为一成不变的逻辑是基本不存在的,我们有时候不得不去修改源码来达成一些核心功能的调整,这时候就引出了OCP的一个延伸概念——策略闭包。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。