2011-03-26 15 views
8

चलिए DAO पैटर्न का एक सरल उदाहरण मानते हैं। Person एक मान ऑब्जेक्ट है और PersonDAO संवाददाता विशेषता है, जो डेटाबेस को Person को संग्रहीत/पुनर्प्राप्त करने के तरीके प्रदान करता है। क्या स्कैला में डीएओ पैटर्न अप्रचलित है?

trait PersonDAO { 
    def create(p:Person) 
    def find(id:Int) 
    def update(p:Person) 
    def delete(id:Int) 
}

हम इस पैटर्न का उपयोग करते हैं (उदाहरण के लिए Active Record के विपरीत), यदि हम व्यवसाय डोमेन और दृढ़ता तर्क को अलग करना चाहते हैं।

क्या होगा यदि हम इसके बजाय another approach का उपयोग करें? हम यह करने के लिए Person से PersonDatabaseAdapter

trait PersonDatabaseAdapter{ 
    def create 
    def retrieve(id:Int) 
    def update 
    def delete 
}

और अंतर्निहित रूपांतरण पैदा करेगा।

implicit def toDatabaseAdapter(person:Person) = new PersonDatabaseAdapter { 
    def create = ... 
    def retrieve(id:Int) = ... 
    def update = ... 
    def delete = ... 
}

अब अगर हम इन रूपांतरण आयात, हम ग्राहक कोड Persons और दुकान में हेरफेर करने के बारे में/निम्नलिखित तरीके से डेटाबेस से/उन्हें प्राप्त कर सकते हैं:

val person1 = new Person 
... 
person1.create 
... 
val person2 = new Person 
... 
person2.retrieve(id) 
...

इस कोड Active Record लेकिन तरह लग रहा है व्यापार डोमेन और दृढ़ता अभी भी अलग हैं।

क्या यह समझ में आता है?

+1

क्या आप जानते हैं कि स्कैला की सिंथेटिक चीनी लागू होने के बाद यह डीएओ पैटर्न के समान ही कार्य करता है? – pedrofurla

उत्तर

7

ठीक है, मुझे "अप्रचलित" पैटर के बारे में कुछ भी पता नहीं है। पैटर्न एक पैटर्न है और आप इसे उपयुक्त जहां उपयोग करते हैं। साथ ही, मुझे नहीं पता कि किसी भी पैटर्न को किसी भाषा में अप्रचलित होना चाहिए जब तक कि भाषा स्वयं ही समान कार्यक्षमता के साथ लागू न हो।

डेटा एक्सेस वस्तु मेरी जानकारी के लिए अप्रचलित नहीं है:

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

http://en.wikipedia.org/wiki/Data_access_object

+2

मेरा मतलब पैटर्न के रूप में प्रस्तुत किया गया था। फिर भी धन्यवाद। मैं सवाल ठीक कर दूंगा। – Michael

2

ऐसा नहीं है कि आप अभी भी डीएओ पद्धति का उपयोग कर रहे हैं मुझे लगता है। आपने इसे अलग-अलग लागू किया है।

मुझे वास्तव में यह प्रश्न मिला क्योंकि मैं शोध कर रहा था कि डीएओ पैटर्न सादे ओल 'जावा में मृत है, जिसे हाइबरनेट की शक्ति दी गई है। ऐसा लगता है कि हाइबरनेट सत्र एक डीएओ का एक सामान्य कार्यान्वयन है, जो परिभाषाओं को परिभाषित करता है जैसे कि बनाना, सहेजना, saveOrUpdate, आदि।

प्रैक्टिस में, मैंने डीएओ पैटर्न का उपयोग करने में बहुत कम मूल्य देखा है। हाइबरनेट का उपयोग करते समय, डीएओ इंटरफेस और कार्यान्वयन एक-लाइनर हाइबरनेट सत्र मुहावरे के आसपास अनावश्यक रैपर होते हैं, उदाहरण के लिए, getSession()। अद्यतन (...);

जो आप समाप्त करते हैं वह डुप्लिकेट इंटरफेस है - एक सेवा इंटरफ़ेस जो डीएओ इंटरफ़ेस में सभी विधियों को फिर से परिभाषित करता है और कुछ अन्य लोगों के संदर्भ में लागू होते हैं।

ऐसा लगता है कि वसंत + हाइबरनेट ने दृढ़ता तर्क को लगभग एक छोटी सीता में कम कर दिया है। लगभग सभी अनुप्रयोगों में दृढ़ता प्रौद्योगिकी पोर्टेबिलिटी की आवश्यकता नहीं है। हाइबरनेट पहले ही आपको डेटाबेस पोर्टेबिलिटी देता है। निश्चित रूप से, डीएओ आपको हाइबरनेट से टॉपलिंक में बदलने की क्षमता प्रदान करेगा, लेकिन व्यवहार में, कोई ऐसा कभी नहीं करेगा। पर्सिस्टेंस टेक्नोलॉजीज पहले से ही कमजोर अबास्ट्रक्शन हैं और एप्लिकेशन इस तथ्य से निपटने के लिए बनाए गए हैं - जैसे डाटाबेस हिट करने के लिए एसोसिएशन सेट करने के लिए प्रॉक्सी लोड करना - जो जरूरी है कि उन्हें दृढ़ता प्रौद्योगिकी के साथ जोड़ दें।हाइबरनेट के साथ होने के नाते वास्तव में इतना बुरा नहीं है, क्योंकि यह रास्ते से बाहर निकलने के लिए सबसे अच्छा है (ला जेडीबीसी और अन्य बकवास की कोई अपवाद नहीं है)।

संक्षेप में, मुझे लगता है कि डीएओ पैटर्न का आपका स्कैला कार्यान्वयन ठीक है, हालांकि आप शायद पूरी तरह से जेनेरिक मिश्रण बना सकते हैं जो किसी भी इकाई को मूल सीआरयूडी संचालन प्रदान करेगा (अधिकतर सक्षम देव "सामान्य डीएओ" को लागू करने के लिए होते हैं। जावा में बेस क्लास भी)। क्या वह सक्रिय रिकॉर्ड करता है?

/यादृच्छिक टिप्पणियों के अंत/

0

मैं अपने retrieve(id: Int) विधि में अपने PersonDatabaseAdapter mutates Person विश्वास करते हैं। तो यह पैटर्न आपके डोमेन ऑब्जेक्ट्स को विचलित करने के लिए मजबूर करता है, जबकि स्कैला समुदाय भाषा की कार्यात्मक प्रकृति (या विशेषताओं) के कारण अपरिवर्तनीयता का पक्ष लेता है।

अन्यथा, मुझे लगता है कि डीएओ पैटर्न में अभी भी समान फायदे और नुकसान हैं (सूचीबद्ध here) स्कैला में जावा में करता है।

0

आजकल मैं रिपोजिटरी पैटर्न को काफी लोकप्रिय मानता हूं, विशेष रूप से इसकी शब्दावली यह दिखती है कि आप संग्रह से निपट रहे हैं।

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