• 质量属性之可修改性


    可修改性的定义:

      可修改性战术的目标是控制实现、测试和部署变更的时间和成本,系统或软件的能够快速地以较高的性价比对系统进行变更。

      

    可修改性分为三类,分别是:

      局部化修改——目标是减少由某个变更直接影响的模块的数量;

      防止连锁反应——目标是限制对局部化的模块的修改,以防止对某个模块的修改间接地影响到其他模块;

      延迟绑定时间——目标是控制部署时间并允许非开发人员进行修改。

      

    举例说明:

      局部化变更包括语义一致性,模块化处理等。这一部分可以借用设计模式的单一原则:一个类只负责一项职责,尽量做到类的只有一个行为原因引起变化.

      用mvc的例子来说,setFamilyName类定义名字,setFamilyWork类定义工作,setFamilyPing定义评价。一个模块只负责一件事情,且不重复不重名,不影响到其它模块,这就是局部化变更的表现,分工明确也会使得代码变得简洁易读。

    public void setFamilyName(String name){
          model.setName(name);    
       }
     
       public String getFamilyName(){
          return model.getName();    
       }
       
       public void setFamilyWork(String work){
           model.setWork(work);    
        }
       
       public String getFamilyWork(){
           return model.getWork();     
        }
       
       public void setFamilyPing(String ping){
          model.setPing(ping);      
       }
     
       public String getFamilyPing(){
           return model.getPing();    
       }

      防止连锁反应包括隐藏信息,接口隔离等,这一部分使用了接口隔离原则,即建立单一接口。

      在这个例子里,就体现了接口隔离原则,建立了单一的接口,每一个类与类分离,每一个接口和接口分离,避免了数据的错误流动,也隐藏了信息,只传输数据。

    public class Mainframe {
        private CPU cpu;
        private Memory memory;
        private HardDisk harddisk;
        private OS os;
        
        public Mainframe() {
            cpu=new CPU();
            memory=new Memory();
            harddisk=new HardDisk();
            os=new OS(); 
        }
        public void on() {
            cpu.run();
            memory.check();
            harddisk.read();
            os.load();
        }
        public void off() {
            cpu.off();
            memory.off();
            harddisk.off();
            os.off();
        }
    }

      延迟绑定时间是给数据类足够的反应时间,创建缓冲层,在类与类间加入第三方类作为沟通,这样也会降低模块间的相互依赖。

      这是一个创建缓冲区的例子,wrap方法可以利用已经存在的数据来创建缓冲区

    byte[] myByte = new byte[] { 1, 2, 3 };
    
    int[] myInt = new int[] { 1, 2, 3, 4 };
    
    ByteBuffer byteBuffer = ByteBuffer.wrap(myByte);
    
    IntBuffer intBuffer = IntBuffer.wrap(myInt, 1, 2);

    通过这样设计可以有效的避免一些bug,例如显示错误,显示的功能不全等。通过上述的战术,也可以用最少的代码量达成目的,在用户的使用上很方便简洁。因为已经隐藏了不需要显示的信息。对于后期的测试维护和更新也有着很大的帮助。代码的一致性使得测试人员对功能模块一目了然,维护人员则能很快找出问题的出生点,更新也提供了相应的接口,不用再一步步的阅读代码了解功能详细。

  • 相关阅读:
    string数组批量转换成Int数组
    TCP/IP 、 HTTP 、HTTPS
    静态布局、自适应布局、流式布局、响应式布局、弹性布局等的概念和区别
    Vue源码学习02 初始化模块init.js
    IOS8白屏
    VUE 源码学习01 源码入口
    http状态码
    vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)
    Vue实战Vue-cli项目构建(Vue+webpack系列之一)
    module.exports,exports,export和export default,import与require区别与联系【原创】
  • 原文地址:https://www.cnblogs.com/Excusezuo/p/12398641.html
Copyright © 2020-2023  润新知