某系統(tǒng)界面類(如Form1、Form2等類)與數(shù)據(jù)訪問類(如DAO1、DAO2等類)之間的調(diào)用關(guān)系較為
某系統(tǒng)界面類(如Form1、Form2等類)與數(shù)據(jù)訪問類(如DAO1、DAO2等類)之間的調(diào)用關(guān)系較為復(fù)雜,其中Form1和Form2的業(yè)務(wù)較為相關(guān),F(xiàn)orm3、Form4和Form5的業(yè)務(wù)上較為相關(guān)。請對該設(shè)計(jì)進(jìn)行重構(gòu)。
根據(jù)上述要求,可以將系統(tǒng)界面類和數(shù)據(jù)訪問類進(jìn)行分組,將業(yè)務(wù)相關(guān)的界面類和數(shù)據(jù)訪問類放在一起,形成一個(gè)業(yè)務(wù)邏輯層。具體類圖如下:
在上述類圖中,將原來的系統(tǒng)界面類和數(shù)據(jù)訪問類拆分為兩個(gè)部分:業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。業(yè)務(wù)邏輯層負(fù)責(zé)處理界面類的業(yè)務(wù)邏輯,并調(diào)用數(shù)據(jù)訪問層來完成數(shù)據(jù)操作。數(shù)據(jù)訪問層負(fù)責(zé)處理具體的數(shù)據(jù)庫操作,包括查詢、插入、更新、刪除等。同時(shí),為了實(shí)現(xiàn)系統(tǒng)的可擴(kuò)展性,將DAO1、DAO2等數(shù)據(jù)訪問類抽象成為一個(gè)抽象數(shù)據(jù)訪問類。
接下來,根據(jù)上述類圖,編寫相應(yīng)的Java代碼,示例如下:
```
// 抽象數(shù)據(jù)訪問類
public abstract class AbstractDAO {
public abstract void query();
public abstract void insert();
public abstract void update();
public abstract void delete();
}
// 數(shù)據(jù)訪問類1
public class DAO1 extends AbstractDAO {
public void query() {
// 實(shí)現(xiàn)查詢操作
}
public void insert() {
// 實(shí)現(xiàn)插入操作
}
public void update() {
// 實(shí)現(xiàn)更新操作
}
public void delete() {
// 實(shí)現(xiàn)刪除操作
}
}
// 數(shù)據(jù)訪問類2
public class DAO2 extends AbstractDAO {
public void query() {
// 實(shí)現(xiàn)查詢操作
}
public void insert() {
// 實(shí)現(xiàn)插入操作
}
public void update() {
// 實(shí)現(xiàn)更新操作
}
public void delete() {
// 實(shí)現(xiàn)刪除操作
}
}
// 業(yè)務(wù)邏輯層1
public class BusinessLayer1 {
private AbstractDAO dao;
public BusinessLayer1(AbstractDAO dao) {
this.dao = dao;
}
public void doBusiness() {
// 處理業(yè)務(wù)邏輯
dao.query(); // 調(diào)用數(shù)據(jù)訪問類完成查詢操作
dao.insert(); // 調(diào)用數(shù)據(jù)訪問類完成插入操作
dao.update(); // 調(diào)用數(shù)據(jù)訪問類完成更新操作
dao.delete(); // 調(diào)用數(shù)據(jù)訪問類完成刪除操作
}
}
// 業(yè)務(wù)邏輯層2
public class BusinessLayer2 {
private AbstractDAO dao;
public BusinessLayer2(AbstractDAO dao) {
this.dao = dao;
}
public void doBusiness() {
// 處理業(yè)務(wù)邏輯
dao.query(); // 調(diào)用數(shù)據(jù)訪問類完成查詢操作
dao.insert(); // 調(diào)用數(shù)據(jù)訪問類完成插入操作
dao.update(); // 調(diào)用數(shù)據(jù)訪問類完成更新操作
dao.delete(); // 調(diào)用數(shù)據(jù)訪問類完成刪除操作
}
}
// 界面類1
public class Form1 {
private BusinessLayer1 businessLayer;
public Form1() {
AbstractDAO dao = new DAO1(); // 創(chuàng)建DAO1實(shí)例
businessLayer = new BusinessLayer1(dao); // 創(chuàng)建BusinessLayer1實(shí)例
}
public void buttonClick() {
businessLayer.doBusiness(); // 調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯
}
}
// 界面類2
public class Form2 {
private BusinessLayer1 businessLayer;
public Form2() {
AbstractDAO dao = new DAO2(); // 創(chuàng)建DAO2實(shí)例
businessLayer = new BusinessLayer1(dao); // 創(chuàng)建BusinessLayer1實(shí)例
}
public void buttonClick() {
businessLayer.doBusiness(); // 調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯
}
}
// 界面類3
public class Form3 {
private BusinessLayer2 businessLayer;
public Form3() {
AbstractDAO dao = new DAO1(); // 創(chuàng)建DAO1實(shí)例
businessLayer = new BusinessLayer2(dao); // 創(chuàng)建BusinessLayer2實(shí)例
public void buttonClick() {
businessLayer.doBusiness(); // 調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯
}
}
// 界面類4
public class Form4 {
private BusinessLayer2 businessLayer;
public Form4() {
AbstractDAO dao = new DAO1(); // 創(chuàng)建DAO1實(shí)例
businessLayer = new BusinessLayer2(dao); // 創(chuàng)建BusinessLayer2實(shí)例
}
public void buttonClick() {
businessLayer.doBusiness(); // 調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯
}
}
// 界面類5
public class Form5 {
private BusinessLayer2 businessLayer;
public Form5() {
AbstractDAO dao = new DAO1(); // 創(chuàng)建DAO1實(shí)例
businessLayer = new BusinessLayer2(dao); // 創(chuàng)建BusinessLayer2實(shí)例
}
public void buttonClick() {
businessLayer.doBusiness(); // 調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯
}
}