मेरे पास एक परियोजना है जहां मेरे पास दो कक्षाएं हैं जो दोनों को एक डेटाबेस एक्सेस ऑब्जेक्ट की आवश्यकता होती है जो एक ही टेबल को अपडेट करती है। फ्रेमवर्क और प्रोजेक्ट की अड़चनें इसलिए बनीं ताकि मैं इन दोनों वर्गों को जोड़ न सकूं। मैंने नीचे एक केस बनाया है जो दिखाता है कि सेटअप कैसा है। क्लास ए को रिकॉर्ड को अपडेट करने और पढ़ने में सक्षम होना चाहिए, जबकि क्लास बी को रिकॉर्ड को अपडेट और डिलीट करने में सक्षम होना चाहिए।
यदि मैं कक्षाओं का उपयोग करता हूं, जैसा कि वे हैं, तो यह ठीक काम करता है, लेकिन मुझे इस तथ्य के साथ समस्या है कि प्रत्येक वर्ग को कार्यक्षमता की आवश्यकता है जो इसे लागू करने के लिए उपयोग नहीं कर रहा है। उदाहरण के लिए, कक्षा ए का उपयोग करने के लिए, मुझे इसे एक डाओ पास करना होगा जो डिलीट फ़ंक्शन को लागू करता है, भले ही इसे कभी भी नहीं बुलाया जाएगा। इसी तरह, मुझे कक्षा बी को एक डीएओ उत्तीर्ण करना है जो पढ़ने के कार्य को लागू करता है लेकिन इसे कभी भी नहीं बुलाया जाएगा।
मैंने दूसरों से विरासत में मिलने वाले इंटरफेस (IReadDao, IUpdateDao, IDeleteDao दाओस से विरासत में मिला होगा) होने के बारे में सोचा, लेकिन इस दृष्टिकोण को मूल रूप से कार्यों के प्रत्येक संयोजन के लिए एक अलग इंटरफ़ेस की आवश्यकता होगी (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
मैं डाओ के लिए एक इंटरफ़ेस का उपयोग करना चाहता हूं क्योंकि मैं डेटाबेस के साथ एप्लिकेशन को युगल नहीं करना चाहता। क्या मुझे पूरा करने के लिए एक पैटर्न या तरीका है जो मैं चाहता हूं कि किसी को भी पता हो? अग्रिम में धन्यवाद।
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
) का एक आदर्श उदाहरण है । उस पर थोड़ा पढ़ना चाह सकते हैं।