• 关于基础组件开发


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

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

                   

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


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


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

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

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

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

        

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

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

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

  • 相关阅读:
    IOC注解开发与XML整合
    Spring的IOC注解开发入门2
    Spring的IOC注解开发入门1
    降维学习笔记
    决策树集成学习summary
    python shuffle
    为什么会突然难过
    保存为pickle
    gitlab被屏蔽问题
    selenium-历史(一)
  • 原文地址:https://www.cnblogs.com/Random/p/2840066.html
Copyright © 2020-2023  润新知