关于基础组件开发

  基础组件是相对于业务功能来说的,因为业务线的事务一般比较繁杂,在没有基础组件的情况下,遇到相似功能的复用大多是直接copy代码然后再粘贴修改。这样的话,类似功能存在多份代码,如果要修改一个BUG,就需要找到所有的相关代码然后再修改,费时费力,效率也不高。而且当需求功能复杂时,代码量也会随之增加,维护成本也相应增加,调试修改都变得很麻烦。所以我们需要在业务层下面抽象出一个基础组件层,该层介于基础库与业务代码之间。

  我们来看看这种轮播功能:

               

 

  这是很常见的内容轮播组件,在编码前我们需要找到这种组件相对变与不变的需求点,


  不变的地方:
    都具有一系列内容
    具有自动播放功能
    可以人工进行切换内容


  会改变的地方:
    图片大小不一样
    可能某些产品的需求会有说明文字,某些没有
    按钮的样子和位置不一样,某些需求没有交互按钮
    不同的产品中,会有不同的动画切换效果

  由此可以看出,改变的大多是UI和交互层面的,所以我们可以把本质的不变的东西直接抽象出来,再把UI层面的剃除出去就可以得到以下的设计思路:

    1.列表管理功能,管理添加的内容。
    2.切换功能,用以切换列表
    3.播放功能,用来让内容自动轮播
    4.UI渲染功能,通过配置不同的模板来得到不同的UI呈现

  以上是按单一职责原则把各功能进行了拆分,抽离了基本逻辑和UI层,用图来描述大概就是这样:

    

  其中,List列表功能管理内容,因为这种切换内容的数据结构是线形的,所以用列表描述就够了,然后其包含了“添加”、“删除”、“插入”和“清除”功能;
  Switch切换功能是对列表数据进行管理,可以获取到需要的内容,包含“下一条”,“前一条”,“跳转到某一条”功能;
  Player播放功能可以实现自动播放,包括“播放”和“停止”功能;
  然后这里抽象出了一个View接口,并且有二个View类实现了该接口(ViewClass1和ViewClass2),于是接口的render方法就得到了不同的实现,用以呈现不同的UI风格。

  这样做有什么好处呢,
  首先,我们把各功能拆分出去后,各功能间就得到了解藕,代码间的影响就小了,这样对于代码维护也方便了很多。比如发现自动播放功能有个BUG,可以直接找到Player这个类进行排查修改就行,不用再在一大坨代码里去找半天;
  其次,拆分后的代码复用率得到了提高,遇到相似功能的需求时就不用直接COPY代码修改,而是获取现有的功能来使用或封装;
  最后,以后有类似需求的扩展,只需要再开发实现View接口的类,配上不同的模板既可,而且不会影响到基础功能。

  最后再简单总结一下,做需求开发的时候,先考虑下该功能层面的变与不变的点,然后再跟据单一职责原则进行功能拆分,分离开各独立功能以达到解藕的目的。

posted @   随机  阅读(1807)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示