某系统界面类(如Form1、Form2等类)与数据访问类(如DAO1、DAO2等类)之间的调用关系较为
某系统界面类(如Form1、Form2等类)与数据访问类(如DAO1、DAO2等类)之间的调用关系较为复杂,其中Form1和Form2的业务较为相关,Form3、Form4和Form5的业务上较为相关。请对该设计进行重构。
根据上述要求,可以将系统界面类和数据访问类进行分组,将业务相关的界面类和数据访问类放在一起,形成一个业务逻辑层。具体类图如下:
在上述类图中,将原来的系统界面类和数据访问类拆分为两个部分:业务逻辑层和数据访问层。业务逻辑层负责处理界面类的业务逻辑,并调用数据访问层来完成数据操作。数据访问层负责处理具体的数据库操作,包括查询、插入、更新、删除等。同时,为了实现系统的可扩展性,将DAO1、DAO2等数据访问类抽象成为一个抽象数据访问类。
接下来,根据上述类图,编写相应的Java代码,示例如下:
```
// 抽象数据访问类
public abstract class AbstractDAO {
public abstract void query();
public abstract void insert();
public abstract void update();
public abstract void delete();
}
// 数据访问类1
public class DAO1 extends AbstractDAO {
public void query() {
// 实现查询操作
}
public void insert() {
// 实现插入操作
}
public void update() {
// 实现更新操作
}
public void delete() {
// 实现删除操作
}
}
// 数据访问类2
public class DAO2 extends AbstractDAO {
public void query() {
// 实现查询操作
}
public void insert() {
// 实现插入操作
}
public void update() {
// 实现更新操作
}
public void delete() {
// 实现删除操作
}
}
// 业务逻辑层1
public class BusinessLayer1 {
private AbstractDAO dao;
public BusinessLayer1(AbstractDAO dao) {
this.dao = dao;
}
public void doBusiness() {
// 处理业务逻辑
dao.query(); // 调用数据访问类完成查询操作
dao.insert(); // 调用数据访问类完成插入操作
dao.update(); // 调用数据访问类完成更新操作
dao.delete(); // 调用数据访问类完成删除操作
}
}
// 业务逻辑层2
public class BusinessLayer2 {
private AbstractDAO dao;
public BusinessLayer2(AbstractDAO dao) {
this.dao = dao;
}
public void doBusiness() {
// 处理业务逻辑
dao.query(); // 调用数据访问类完成查询操作
dao.insert(); // 调用数据访问类完成插入操作
dao.update(); // 调用数据访问类完成更新操作
dao.delete(); // 调用数据访问类完成删除操作
}
}
// 界面类1
public class Form1 {
private BusinessLayer1 businessLayer;
public Form1() {
AbstractDAO dao = new DAO1(); // 创建DAO1实例
businessLayer = new BusinessLayer1(dao); // 创建BusinessLayer1实例
}
public void buttonClick() {
businessLayer.doBusiness(); // 调用业务逻辑层处理业务逻辑
}
}
// 界面类2
public class Form2 {
private BusinessLayer1 businessLayer;
public Form2() {
AbstractDAO dao = new DAO2(); // 创建DAO2实例
businessLayer = new BusinessLayer1(dao); // 创建BusinessLayer1实例
}
public void buttonClick() {
businessLayer.doBusiness(); // 调用业务逻辑层处理业务逻辑
}
}
// 界面类3
public class Form3 {
private BusinessLayer2 businessLayer;
public Form3() {
AbstractDAO dao = new DAO1(); // 创建DAO1实例
businessLayer = new BusinessLayer2(dao); // 创建BusinessLayer2实例
public void buttonClick() {
businessLayer.doBusiness(); // 调用业务逻辑层处理业务逻辑
}
}
// 界面类4
public class Form4 {
private BusinessLayer2 businessLayer;
public Form4() {
AbstractDAO dao = new DAO1(); // 创建DAO1实例
businessLayer = new BusinessLayer2(dao); // 创建BusinessLayer2实例
}
public void buttonClick() {
businessLayer.doBusiness(); // 调用业务逻辑层处理业务逻辑
}
}
// 界面类5
public class Form5 {
private BusinessLayer2 businessLayer;
public Form5() {
AbstractDAO dao = new DAO1(); // 创建DAO1实例
businessLayer = new BusinessLayer2(dao); // 创建BusinessLayer2实例
}
public void buttonClick() {
businessLayer.doBusiness(); // 调用业务逻辑层处理业务逻辑
}
}