ฉันมีโครงการที่ฉันมีสองคลาสที่ทั้งสองต้องการวัตถุเข้าถึงฐานข้อมูลที่ปรับปรุงตารางเดียวกัน ข้อ จำกัด ของกรอบงานและโครงการทำให้เป็นไปไม่ได้ที่จะรวมสองคลาสนี้ ฉันได้สร้างกรณีด้านล่างที่แสดงว่าการตั้งค่าเป็นอย่างไร คลาส A จำเป็นต้องสามารถอัปเดตและอ่านบันทึกในขณะที่คลาส B จำเป็นต้องสามารถอัปเดตและลบบันทึกได้
ถ้าฉันใช้คลาสเหมือนเดิมมันใช้งานได้ดี แต่ฉันมีปัญหากับความจริงที่ว่าแต่ละคลาสต้องการฟังก์ชันการทำงานที่ไม่ได้ใช้งาน ตัวอย่างเช่นในการใช้คลาส A ฉันต้องส่งผ่าน dao ที่ใช้ฟังก์ชั่นลบแม้ว่ามันจะไม่ถูกเรียกใช้ ในทำนองเดียวกันฉันต้องผ่านคลาส B a dao ที่ใช้ฟังก์ชั่นการอ่าน แต่มันจะไม่ถูกเรียก
ฉันคิดเกี่ยวกับการเข้าถึงโดยการมีส่วนต่อประสานที่สืบทอดผู้อื่น (IReadDao, IUpdateDao, IDeleteDao เป็น daos ที่จะสืบทอดมาจาก) แต่วิธีการนี้โดยทั่วไปจะต้องใช้อินเทอร์เฟซที่แตกต่างกันสำหรับฟังก์ชั่นแต่ละชุด (IUpdateAndDelete )
ฉันต้องการใช้อินเทอร์เฟซสำหรับ dao เพราะฉันไม่ต้องการเชื่อมโยงแอปพลิเคชันกับฐานข้อมูล มีรูปแบบหรือวิธีการในการบรรลุสิ่งที่ฉันต้องการให้ใครรู้หรือไม่? ขอบคุณล่วงหน้า.
class IDao {
void update(ModelDao model);
void delete(String guid);
ModelDao read(String guid);
}
Class A {
private IDao dao;
public A(IDao dao) {
this.dao = dao;
}
public void doStuff() {
ModelDao model = new ModelDao();
...
dao.update(model);
}
public void readThenDoSomething(String id) {
ModelDao model = dao.read(id);
...
}
}
Class B {
private IDao dao;
public B(IDao dao) {
this.dao = dao;
}
public void makeUpdate() {
ModelDao model = new ModelDao();
...
dao.update(model);
}
public void delete(String id) {
dao.delete(id);
}
}
I
จากSOLID
) อาจต้องการอ่านสักหน่อย