2010-01-22 17 views
5

मैंने हाल ही में हमारे कोड में इस पैटर्न (?) में भाग लिया और यह सोचकर कि यह कैसे उपयोगी है, यह आश्चर्यजनक है। हमारे पास ब्लेज़डीएस का उपयोग कर एक स्प्रिंग ऐप और फ्लेक्स फ्रंट एंड है। यह निर्णय लिया गया है कि हम अपने DTOs पर इंटरफेस का उपयोग करें, तो जैसे:डीटीओ और इंटरफेस

जावा


public interface ISomeDTO { 
     Integer setId(); 
     void getId(Integer i); 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Actionscript


public interface ISomeDTO { 
     var id:Integer; 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

क्या एक डीटीओ पर एक अंतरफलक आप हासिल करता है? ये बिल्कुल शून्य तर्क के साथ हल्के वजन वाले वस्तुएं हैं। डीटीओ समझ में आता है, इंटरफेस समझ में आता है, लेकिन एक साथ नहीं।

उत्तर

3

मुझे नहीं पता कि इंटरफेस और डीटीओ एक साथ क्यों काम नहीं करेंगे।

एक कारखाने/असेंबलर पर विचार करें जो डीटीओ से डोमेन ऑब्जेक्ट बनाता है। आप कारखाने को रणनीतियों के साथ कॉन्फ़िगर कर सकते हैं ताकि वह डीटीओ के प्रकार के आधार पर किसी डोमेन ऑब्जेक्ट के विशिष्ट कार्यान्वयन को तैयार कर सके। डीटीओ आदर्श रूप से यहां एक इंटरफ़ेस पर टाइप किया जाएगा। (यह विपरीत दिशा में भी काम करता है)।

मैं यह नहीं कह रहा हूं कि आपको प्रत्येक डीटीओ को एक इंटरफ़ेस के पीछे रखना चाहिए, लेकिन जैसे ही डोमेन ऑब्जेक्ट्स के साथ, निश्चित रूप से ऐसे मामले होंगे जहां ऐसा करने के लिए फायदेमंद होगा।

+2

वे आपके मामले में करते हैं और मैं देख सकता हूं कि यह फायदेमंद क्यों होगा। यह किसी भी स्पष्ट कारण (कम से कम मेरे लिए) के लिए हमारे आवेदन में मानक है। मेरा विचार है कि जब आपको इसकी आवश्यकता हो, तो इंटरफ़ेस का उपयोग करना न केवल इसलिए। – unscene

3

लेनदेन आधारित वातावरण में डीटीओ का उपयोग आपकी डेटाबेस इकाइयों को अंतर्निहित डीबी सत्र से विभाजित करने के लिए किया जाता है।

ये सत्र आम तौर पर अनुपलब्ध हैं और अधिकांश संस्थाएं प्रॉक्सी से बना होती हैं जो आंशिक रूप से सदस्य संग्रह लोड करती हैं। इसलिए यदि आप किसी प्रॉक्सीकृत इकाई पर संग्रह संपत्ति तक पहुंचने के लिए थे, तो प्रॉक्सी समय पर इस बिंदु पर संग्रह लोड करता है, गीलेर डेटाबेस लेनदेन मौजूद होता है या नहीं। इसलिए जब कोई सक्रिय लेनदेन नहीं होता है तो किसी इकाई सदस्य की पहुंच में कोई गलती हो सकती है।

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

इस समस्या से परिभ्रमण करने के लिए अलग-अलग दृष्टिकोण हैं:

  • सत्र उदा के माध्यम से खुला रखें एक फ़िल्टर तंत्र (वसंत के OpenSessionInViewFilter), हालांकि सख्ती से बोला जाए यह एक विरोधी पैटर्न
  • पहले से ही प्रारंभ

आशा है कि यह मदद की है अपने DAOs एक डाटा ट्रांसफर की जरूरत के सदस्यों के साथ भरा वस्तुओं वापसी करते हैं।

+1

निश्चित रूप से मैं उन बिंदुओं को समझता हूं। लेकिन डीटीओ पर एक इंटरफ़ेस क्यों मुझे कोई समझ नहीं आता है? डीटीओ का उपयोग यहां एक इंटरफ़ेस को शामिल करने के लिए अपरिचित नहीं है। – unscene

+0

ओह sry पूरी तरह से सवालों को गलत तरीके से पढ़ा। देर से और सब। मुझे नहीं लगता कि कोई यहां इंटरफ़ेस का उपयोग क्यों करेगा, मुझे कोई समझ नहीं आता:/ – fasseg

+0

कम से कम मैं केवल एकमात्र नहीं हूं: पी हालांकि उस उत्तर के लिए धन्यवाद। अच्छी तरह तैयार किया गया। – unscene

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