2011-11-08 17 views
5

यह पहली बार डीएओ पैटर्न का उपयोग कर रहा है। मेरे पास अब तक read है, इस पैटर्न को लागू करने से मुझे मेरे कॉलिंग कोड (नियंत्रक) को किसी भी दृढ़ता कार्यान्वयन से अलग करने में मदद मिलेगी - ठीक वही है जो मैं चाहता हूं; यानी, मैं किसी विशेष डेटाबेस या तृतीय पक्ष पुस्तकालयों के उपयोग के लिए प्रतिबंधित नहीं होना चाहता हूं।डीएओ और निर्भरता इंजेक्शन, सलाह?

मैं मॉर्फिया द्वारा प्रदान किए गए BasicDAO कक्षा के साथ, मोंगोडीबी और मॉर्फिया (उदाहरण के रूप में) का उपयोग करके कुछ टेस्ट कोड (टीडीडी फैशन में) बना रहा हूं।

जहां तक ​​मैं कह सकता हूं, BasicDAO<T, V> को विस्तारित करने के लिए एक ऐसे निर्माता की आवश्यकता है जो मॉर्फिया और मोंगो वस्तुओं को स्वीकार करे; ये बहुत विशिष्ट (तृतीय पक्ष) प्रकार हैं जिन्हें मैं वास्तव में डीएओ कक्षा के बाहर तैरना नहीं चाहता हूं।

मेरे पास एक प्लग करने योग्य आर्किटेक्चर कैसे हो सकता है? इसका मतलब है, मुझे वास्तविक स्रोत के बाहर, विशिष्ट कॉन्फ़िगरेशन तर्कों के साथ एक विशिष्ट डीएओ का उपयोग करने के लिए अपने एप्लिकेशन को कॉन्फ़िगर करने में सक्षम होने के बाद क्या देखना चाहिए?

उत्तर

9

एक "प्लग करने योग्य" डीएओ परत आमतौर पर एक इंटरफ़ेस डीएओ पर आधारित होती है। उदाहरण के लिए, की सुविधा देता है एक काफी सामान्य साधारण एक पर विचार करें:

public interface GenericDAO <T, K extends Serializable> { 
    List<T> getAll(Class<T> typeClass); 
    T findByKey(Class<T> typeClass, K id); 
    void update(T object); 
    void remove(T object); 
    void insert(T object); 
} 

तो फिर तुम जहां विभिन्न क्षेत्रों पा सकते हैं, अलग अलग कई सामान्य डीएओ कार्यान्वयन विकसित कर सकते हैं (यह है कि तुम क्या Morphia's generic DAO में है) (में परिलक्षित कन्स्ट्रक्टर पैरामीटर, सेटर्स और गेटर्स इत्यादि)। के मान लेते हैं एक JDBC आधारित एक:

public interface PersonDAO extends GenericDAO<Person, Long> { 

} 

और

public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO { 

} 
:

public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> { 
    private String db_url; 

    private Connection; 
    private PreparedStatement insert; 
    // etc. 
} 

एक बार सामान्य डीएओ (एक ठोस डेटासंग्रह के लिए) लागू किया गया है, एक ठोस डीएओ हो रही एक नहीं brainer होगा

(बीटीडब्लू, जो आपके पास Morphia's BasicDAO में है, मोंगोडीबी के लिए सामान्य डीएओ का कार्यान्वयन है)।

प्लग करने योग्य वास्तुकला में दूसरी बात कंक्रीट डीएओ कार्यान्वयन का चयन है। मैं सलाह देता हूं कि Apress: Pro Spring 2.5 ("वसंत को" हैलो वर्ल्ड "में) को धीरे-धीरे कारखानों और निर्भरता इंजेक्शन के बारे में जानें।

+0

इसके लिए +1। मैं जोड़ता हूं कि गुइस डी फ्रेमवर्क है महान सफलता के साथ उपयोग कर रहे हैं। –

0

एक मानक मानक डी ढांचे वसंत और गुइस हैं। इन दोनों ढांचे में टीडीडी की सुविधा है।

1

कॉन्फ़िगरेशन का उपयोग करके वसंत आपके लिए DI करता है और इसका व्यापक रूप से उपयोग किया जाता है।

1

हाय मैं जावा में एक विशेषज्ञ नहीं हूं। लेकिन एक समाधान देने की कोशिश कर रहा है।

आपके पास एक सुपरक्लास हो सकता है जहां सभी कनेक्शन संबंधित सामान होते हैं और कोई अन्य बेस क्लास जहां आप इसे बढ़ा सकते हैं और इसका उपयोग कर सकते हैं।

बाद में विशिष्ट तृतीय पक्ष ड्राइवरों के लिए आपके डीबी में कोई भी स्विच आप सुपरक्लास को फिर से लिख सकते हैं।

फिर से मैं कोई विशेषज्ञ नहीं हूं। सीखने के लिए बस यहाँ चारों ओर कोशिश कर रहा हूँ। :)

संबंधित मुद्दे