• 质量属性战术-可修改性战术代码层面实现(以“信息领域热词分析系统为例”)


    • 对可修改性的理解

            可修改性战术可以理解为:指系统或软件的能够快速地以较高的性价比对系统举行调换的能力,就好比热词分析系统为例,如果我想把项目从本地部署到服务器上,由于Mysql数据库的相关配置不一样,所以就需要对数据库的操作相关代码进行修改,修改时间长短、变更的代码量多少就体现了项目是否具备可修改性

            其目标是控制实现、测试和部署的变更的时间和成本;

    • 可修改性的相关战术

    根据其目标可以将战术进行分为三组:

    1. 减少由某个变更直接影响的模块数量-----局部化修改;
    2. 限制对局部化的模块的修改------防止连锁反应;
    3. 控制部署时间并允许非开发人员进行修改------延迟绑定时间。

    在信息领域热词分析系统的开发中,在对数据库的读取操作中,我使用了数据库的连接池技术,使用这一技术,可以很简单的对数据进行读取,数据项的变更,甚至更换数据库;

    1、写好数据库的连接配置文件c3p0-config.xml(局部化修改战术)

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <c3p0-config>
    3     <default-config>
    4         <property name="user">root</property>
    5         <property name="password"></property>
    6         <property name="driverClass">com.mysql.jdbc.Driver</property>
    7         <property name="jdbcUrl">jdbc:mysql://localhost:3306/reci?useUnicode=true&amp;characterEncoding=utf-8</property>
    8     </default-config> 
    9 </c3p0-config> 

    在更改数据库时,只需要修改连接数据库名,密码等就可以,这使用了可修改性战术的第一个战术-----局部化修改战术。

    2、读取数据,在建立好javaBean文件后(以“热词类”举例,防止连锁反应战术)

     1 package reci.bean;
     2 
     3 public class wordBean {
     4     private int id;
     5     private String words;
     6     private String content;
     7     private int counts;
     8     public wordBean() {
     9         super();
    10         // TODO Auto-generated constructor stub
    11     }
    12     
    13     public wordBean(int id, String words, String content, int counts) {
    14         super();
    15         this.id = id;
    16         this.words = words;
    17         this.content = content;
    18         this.counts = counts;
    19     }
    20 
    21     public int getCounts() {
    22         return counts;
    23     }
    24 
    25     public void setCounts(int counts) {
    26         this.counts = counts;
    27     }
    28 
    29     public int getId() {
    30         return id;
    31     }
    32     public void setId(int id) {
    33         this.id = id;
    34     }
    35     public String getWords() {
    36         return words;
    37     }
    38     public void setWords(String words) {
    39         this.words = words;
    40     }
    41     public String getContent() {
    42         return content;
    43     }
    44     public void setContent(String content) {
    45         this.content = content;
    46     }
    47     
    48 
    49 }
    View Code

    在读取数据时,就比较简单(可以看代码)

     1 package reci.dao;
     2 import java.sql.SQLException;
     3 import java.util.List;
     4 
     5 import javax.sql.DataSource;
     6 
     7 import org.apache.commons.dbutils.QueryRunner;
     8 import org.apache.commons.dbutils.handlers.BeanHandler;
     9 import org.apache.commons.dbutils.handlers.BeanListHandler;
    10 
    11 import reci.bean.wordBean;
    12 import reci.utils.DataSourceUtils;
    13 public class wordDao {
    14 DataSource ds = DataSourceUtils.getDataSoucre();
    15     
    16     public List<wordBean> listWord() throws SQLException {
    17         QueryRunner runner = new QueryRunner(ds);
    18         String sql = "select * from word";
    19         return runner.query(sql, new BeanListHandler<wordBean>(wordBean.class));
    20     }
    21     public wordBean getBaseInfo(String name) throws SQLException {
    22         QueryRunner runner = new QueryRunner(ds);
    23         String sql = "select * from word where words = ?";
    24         return runner.query(sql, new BeanHandler<wordBean>(wordBean.class),name);
    25     }
    26 
    27 }
    View Code

    如果数据项变更后,只需要修改Bean文件,而不需要修改其他的文件,大大减少了修改模块的数量,以及更改后的部署时间,这使用了可修改性战术的第二个战术---防止连锁反应战术中信息隐藏方法。

    以上这两种战术都是基于“高内聚,低耦合”思想

    3、推迟绑定时间,控制部署时间以及允许非开发人员进行修改,此项目中表现较为突出的还是数据库连接池的使用;

    将数据库可能发生的修改放在c3p0-config.xml配置文件中,可以减少部署时间,甚至没有变成基础的人员也可以实现对数据库配置的修改。

    1  <?xml version="1.0" encoding="UTF-8"?>
    2  <c3p0-config>
    3      <default-config>
    4          <property name="user">root</property>
    5          <property name="password"></property>
    6          <property name="driverClass">com.mysql.jdbc.Driver</property>
    7          <property name="jdbcUrl">jdbc:mysql://localhost:3306/reci?useUnicode=true&amp;characterEncoding=utf-8</property>
    8      </default-config> 
    9  </c3p0-config> 

    以上是本人对可修改性战术的理解,望大佬指教

  • 相关阅读:
    bash组织成树数据结构
    statickeyword于C和C++用法
    POJ2239 Selecting Courses【二部图最大匹配】
    MVC过滤器的详细讲解和示范样本
    hdoj 2602 Bone Collector 【01背包】
    下的生产环境was重新启动不同意,怎么做?
    Qt Model/View 的简单说明
    View与Model绑定注意事项 (视图无数据显示)
    Qt Delgate的使用 简单说明
    QAbstractTableModel中的data()到底执行几遍???
  • 原文地址:https://www.cnblogs.com/KYin/p/12396421.html
Copyright © 2020-2023  润新知