मान लीजिए मैं निम्न प्रकार के डेटा है:विरासत और जावा
class Customer {
String id; // unique
OtherCustData someOtherData;
}
class Service {
String url; // unique
OtherServiceData someOtherData;
}
class LastConnection {
Date date;
OtherConnData someOtherData; // like request or response
}
अब मैं जब याद करने के लिए सेवाओं की प्रत्येक से जुड़े ग्राहकों के प्रत्येक की जरूरत है।
मैं संरचना बनाना होगा:
Map<Customer, Map<Service, LastConnection>> lastConnections;
या, आईडी के आधार पर खोज करने में सक्षम हो और सभी बराबर लिखने के लिए है() और hashCode():
Map<String, Map<String, LastConnection>> lastConnections;
अब मैं यहां पहुंच सकता है द्वारा
LastConnection connection = lastConnections.get(custId).get(srvUrl);
यह सब बदसूरत लगता है, मैं LastConnections, एस के नक्शे के मानचित्र उम्मीद तरीकों के दसियों के लिए मानकों के रूप में यह पारित करने के लिए विशेष रूप से है कि LastConnection डेटा ओ मैं अपने ही कक्षाएं बनाने की सोच रहा हूँ कि कुछ ऐसा दिखाई देगा जो:
class CustomerConnections {
Map<String, LastConnection> customerConnections;
LastConnection get(String srvUrl) {
return customerConnections.get(srvUrl);
}
... // all other needed operations;
}
class AllConnections {
Map<String, CustomerConnections> allConnections;
public LastConnection get(String custId, String srvUrl) {
return get(custId).get(srvUrl);
}
public CustomerConnection get(String custId) {
return allConnections.get(custId);
}
... // all other needed operations;
}
समस्या यह है कि यह है:
class CustomerConnections extends HashMap<String, LastConnection> {
}
class AllConnections extends HashMap<String, CustomerConnections> {
public LastConnection get(String custId, String srvUrl) {
return get(custId).get(srvUrl);
}
}
ठीक है, मैं पहले से ही पता चला कि विरासत 3v1l है, इसलिए की रचना की कोशिश करते हैं मुझे यकीन नहीं है कि सॉलिड सिद्धांतों और सभी सर्वोत्तम प्रथाओं का सम्मान करने का सबसे अच्छा तरीका क्या होगा। कक्षाओं को बनाना जो पहले से मौजूद संग्रहों को विस्तारित करने के अलावा कुछ भी नहीं करते हैं, वे आवश्यकता से परे इकाइयों को गुणा करने की तरह लगते हैं, लेकिन मेरे कोड को और स्पष्ट कर देंगे (विशेष रूप से जब अगले स्तर होते हैं - जैसे महीने के सभी ऑकनेक्शन के मानचित्र और इसी तरह)। कोई निर्देश?
इसके अलावा निर्दोष छोटे "अन्य सभी आवश्यक संचालन" टिप्पणी बॉयलरप्लेट प्रतिनिधिमंडल के मीट्रिक बटलोड को छुपाती है। –
@ माइकल फेयर प्वाइंट – butterchicken
हालांकि आपको केवल एक बार ऐसा करना है। एक प्रतिनिधिमंडल लागू करता है मानचित्र ऐसे सभी एक्सटेंशन के लिए बेस क्लास के रूप में उपयोग किया जा सकता है। –
paulcm