2012-09-20 16 views
5

हम 3 स्तरीय आर्किटेक्चर स्थिति में यथासंभव स्पष्ट और साफ-सफाई करने की कोशिश कर रहे हैं।आर्किटेक्चर, कई पैरामीटर बनाम लंबे पैरामीटर सूचियां

लेकिन हमारी प्रणाली की जटिलता हमें आगे बढ़ने के सर्वोत्तम तरीके के बारे में उलझन में छोड़ रही है।

यदि हम छोटे पैरामीटर सूचियों के साथ सेवा परत के माध्यम से चल रहे कार्यों की बहुत सी श्रृंखलाओं का उपयोग करते हैं, तो यह क्या हो रहा है के संदर्भ में स्पष्ट लगता है, फिर भी ऐसा लगता है कि इन तरीकों से बहुत सारी कार्यक्षमता दोहराई जा रही है।

हालांकि, यदि हम कम विधियों का उपयोग करते हैं, और विधियों के भीतर कार्यक्षमता बदलने के लिए पैरामीटर की बड़ी सूचियां हैं, तो यह हाथ से बाहर निकलता प्रतीत होता है।

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

यह सिर्फ हम DRY के बारे में बहुत कुछ सुनते हैं, इसलिए ऐसा लगता है कि विधियों के अंदर कुछ पुनरावृत्ति चल रही है। लेकिन यह अधिक लचीला लगता है।

+1

आपके प्रश्न का अधिक ठोस उदाहरण के बिना इस प्रश्न का जवाब देना मुश्किल है। – Paddy

+0

पुनरावृत्ति को एक अलग विधि में निकालें? – auser

+0

इसका मतलब है कि हमारे पास वेब स्तरीय, डोमेन स्तर और डीबी टियर है। और डी का उपयोग किया जा रहा है। तो तकनीकी रूप से अच्छा अभ्यास, लेकिन कार्यान्वयन के मामले में एक उपरि है। मुझे लगता है कि यह उपरोक्त है क्योंकि ओवरहेड का मतलब है कि हमें प्रत्येक स्तर के माध्यम से नेविगेट करने के लिए और कोड लिखना है, जिसका अर्थ है कि कई कार्यों या कई परमिटर्स के बीच ओवरहेड अधिक दृढ़ता से महसूस किया जाता है। –

उत्तर

1

अधिकांश लोग बड़े लोगों पर छोटे विधि हस्ताक्षर पसंद करते हैं। यह विधियों के बारे में तर्क करना आसान बनाता है (उनका परीक्षण करने के लिए उल्लेख नहीं है!), हालांकि आपको इसका उपयोग DRY सिद्धांतों के उल्लंघन को न्यायसंगत साबित करने के लिए नहीं करना चाहिए।

क्या कोई कारण नहीं है कि आप छोटे विधि हस्ताक्षर क्यों नहीं कर सकते हैं और आम, प्रतिकृति कोड को आंतरिक सहायक तरीकों में कारक बना सकते हैं?

+1

जबकि अन्य उत्तर यहां महान हैं, यही वह उत्तर है जिसे मैं ढूंढ रहा था। –

0

मुझे लगता है कि "बहुत सी विधियां" एक ही कार्य करती हैं और केवल पैरामीटर ही भिन्न होती हैं।

मेरा एपोरैच कुछ ऑब्जेक्ट्स के साथ डेटा को पास करना होगा, जैसे ऑब्जेक्ट्स में GridBagLayout पर पैरामीटर कैसे पास किए जाते हैं। उदाहरण के लिए, एक खोज क्वेरी के लिए मैं सभी संभावित स्थितियों के साथ एक बीन "फ़िल्टर" पास करता हूं, विधि में कोड लम्बे समय से जटिल नहीं है ("स्थिति एक्स निर्दिष्ट है -> क्वेरी में एक्स फ़िल्टर जोड़ें") और आसानी से विभाजित किया जा सकता है कुछ सहायक कार्यों में।

1

मुझे सच में विश्वास है कि एंटरप्राइज़ अनुप्रयोगों के लिए कक्षाओं और विधियों के लिए नामों को प्रकट करने के अच्छे इरादे के साथ, और पूरे समाधान के भीतर लागू कुछ डिजाइन पैटर्न के साथ एक अच्छी स्तरित वास्तुकला से बेहतर कुछ भी नहीं है। इस नियम के बाद, यह लंबी विधियों के लिए विरोधाभासी है क्योंकि शायद वे एकल उत्तरदायित्व सिद्धांत तोड़ देंगे, इसलिए वे अपने नाम से व्यक्त नहीं होंगे कि वे वास्तव में क्या कर रहे हैं। यदि आप डीआरवाई सिद्धांत का उपयोग करना चाहते हैं तो बस अपने तरीकों और कक्षाओं को साफ, संक्षिप्त और स्पष्ट रखें और पूरे समाधान में उनका पुन: उपयोग करने के लिए कुछ डिज़ाइन पैटर्न लागू करें।

मैं इस तरह के "कोड फ़िलोसोफी" के बारे में अधिक जानकारी देखने के लिए डोमेन संचालित Desing (एरिक इवांस) और क्लीन कोड (रॉबर्ट सी मार्टिन) पढ़ने की सलाह देते हैं।

0

यह आमतौर पर दृढ़ युग्मित अनुप्रयोगों का एक लक्षण है। ए से बी प्राप्त करने के लिए आपको पंद्रह मोड़ लेना होगा और फिर थोड़ा सा वापस जाना होगा।

युग्मन को कम करने का एक शानदार तरीका डोमेन ईवेंट पेश करना है। उदाहरण के लिए, यदि कोई उपयोगकर्ता बन जाता है UserCreated नामक एक डोमेन घटना जब वर्ग द्वारा की सदस्यता दी गई उत्पन्न करेंगे SendWelcomeEmail और NotifyAdminsOfNewUser या SendIntroductionaryOffer

मुद्दा यह है कि किसी को भी जो प्रभावी रूप से जब से तुम डॉन जटिलता को कम एक घटना पर कार्रवाई कर सकते हैं अब आपके कोड को दृढ़ता से जोड़ना नहीं है।

2

मुझे लगता है कि इसका मतलब क्या है इसका 2 उदाहरण प्रदान करना बेहतर होगा। यह निम्न में से एक जैसा लगता है:

  1. आपके पास खराब डिज़ाइन है।
  2. आपके पास कई ऑब्जेक्ट्स के माध्यम से बातचीत/व्यवहार फैल गया है।
  3. आप DI \ डिज़ाइन पैटर्न को गलत तरीके से उपयोग कर रहे हैं।
  4. आपका कोड वास्तव में प्रक्रियात्मक है और ओओ नहीं।

क्योंकि आपने कोई उदाहरण नहीं दिया है, इसलिए मैं इन सभी विकल्पों के लिए केवल शीघ्र ही चलूंगा।

1. आपके पास खराब डिज़ाइन है।

3. आप DI \ डिज़ाइन पैटर्न का गलत उपयोग कर रहे हैं।

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

2. आपके पास कई ऑब्जेक्ट्स के माध्यम से बातचीत/व्यवहार फैल गया है। इस समस्या से निपटने के लिए डीसीआई http://alexsmail.blogspot.com/2012/09/dci.html का उपयोग करने पर विचार करें।

4. आपका कोड वास्तव में प्रक्रियात्मक है और ओओ नहीं। मैंने प्रोग्रामर द्वारा जावा में कोड क्रिएटेंट देखा जो प्रक्रियात्मक कोड लिखने के लिए नियमित रूप से होता है। इसमें कई पैरामीटर हैं जो tweak विधि निष्पादन। समाधान आपके कोड को फिर से डिजाइन करना होगा और (पुनः) अपने प्रोग्रामर को प्रशिक्षित करना होगा।

+0

रन डाउन के लिए धन्यवाद। आपके द्वारा बताए गए विकल्पों में से कोई भी सत्य हो सकता है। जैसे ही हम जाते हैं हम पुन: प्रतिक्रिया देंगे। लेकिन मुझे लगता है कि हम सामान्य रूप से कई छोटे कार्यों को बनाए रखेंगे। –

+0

जब आप कहते हैं कि आपका कोड प्रक्रियात्मक है और ओओ नहीं है। आपका क्या अर्थ है? निश्चित रूप से सभी ओओ कोड में कुछ प्रक्रियात्मक कोड है? हमारे पास डीबी ऑब्जेक्ट्स, डोमेन ऑब्जेक्ट्स, व्यू मॉडेल, हेल्पर क्लासेस, सर्विसेज, इंटरफेस, रिपोजिटरीज हैं। क्या इसका मतलब है कि हमारे पास ओओ पर्याप्त है? –

+0

उपर्युक्त विवरण से- मुझे नहीं लगता कि आपको अंतिम समस्या है। :-) सभी ओओ कोड में कुछ प्रक्रियात्मक कोड है। मेरा मतलब था कि मैंने जावा में लिखे गए प्रक्रियात्मक कोड को देखा, बिना सेवाओं, इंटरफेस, आदि :-) – alexsmail

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

  • कोई संबंधित समस्या नहीं^_^