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

  • 对可修改性的理解

        可修改性战术可以理解为:指系统或软件的能够快速地以较高的性价比对系统举行调换的能力,就好比热词分析系统为例,如果我想把项目从本地部署到服务器上,由于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> 

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

 

posted @ 2020-03-01 16:39  K_Y  阅读(166)  评论(0编辑  收藏  举报