avatar

目录
程序的耦合

概念

耦合性,也叫耦合度,是对模块间关联程序的度量。耦合的强弱取决于模块间结构和复杂性、调用模块的方式以及通过界面传递数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差(减低耦合性,可以提高其独立性)。

耦合

在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件的耦合最小、软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是 高内聚低耦合

耦合包括两个方面:(Java中)

1. 类之间的耦合

2. 方法之间的耦合

解耦

解耦是指降低程序间的依赖关系。

而我们在实际的开发中,应该做到: 编译期不依赖,运行时依赖

所以,

解耦的思路是:

第一步 - 使用 反射 来创建对象,而避免使用new关键字

第二步 - 通过 读取配置文件 ,来获取要创建的对象的全限定类名

案例

编写JDBC的工程代码来分析程序的耦合

下面是一种JDBC操作的代码:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class JdbcDemo1 {

public static void main(String[] args) throws Exception {

// 1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

// 2.创建连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm_spring","root","root");

// 3.获取操作数据库的预处理对象
PreparedStatement preparedStatement = connection.prepareStatement("select * from account");

// 4.执行SQL,得到结果集
ResultSet resultSet = preparedStatement.executeQuery();

// 5.遍历结果集
while(resultSet.next()){
System.out.println(resultSet.getString("name"));
}

// 6.释放资源
resultSet.close();
preparedStatement.close();
connection.close();

}
}

在注册驱动这一步骤当中,代码:

java
1
2
// 1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

当程序的库依赖没有这个驱动类时,该程序将无法正常编译,所以应当使用:

java
1
2
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");

这样在同样没有这个驱动类时,程序只是出现异常

这样做就降低了程序间的依赖关系,实现了解耦。

不过呢,最好还是用配置文件的方式,从中读取驱动的名字,然后再加载驱动,这样就更能降低依赖关系,使代码更容易维护!

所以,标准的JDBC操作的步骤应该为:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 // 1.导入库文件
import java.sql.*;

public class JDBC {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement psmt = null;
try {
// 2.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver").newInstance();

// 3.创建连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis","root","root");

// 3.获取操作数据库的预处理对象
psmt = connection.prepareStatement("select * from account");

// 4.执行SQL,得到结果集
ResultSet rs = preparedStatement.executeQuery();

// 5.遍历结果集
while(rs.next()) {
System.out.println(rs.getString("name"));
}

rs.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(conn != null)
conn.close();
if(psmt != null)
psmt.close();
} catch(Exception ex) {
e.printStackTrace();
}
}
}
}
文章作者: Amor-Joo
文章链接: https://cutealien.cn/2020/01/22/2020-1-22-Program-Coupling/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cutealien
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论