विकास दृष्टिकोण: उपयोगकर्ता इंटरफ़ेस में या डोमेन मॉडल आउट?


13

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

फिर भी, कई नई भाषाओं और API में आपको बाहर से सोचने के लिए मजबूर किया जाता है। पहले C ++ और MFC के साथ, और अब C # और WPF के साथ, Microsoft ने यह जान लिया है कि विकासकर्ता GUI बिल्डरों पर झुका हुआ है जहाँ आप इवेंट हैंडलर लागू करने के लिए अपना आवेदन बनाते हैं। । जावा स्विंग विकास इतना अलग नहीं है, केवल आप स्वयं फॉर्म पर नियंत्रणों को त्वरित करने के लिए कोड लिख रहे हैं। कुछ परियोजनाओं के लिए, कभी भी एक डोमेन मॉडल नहीं हो सकता है - सिर्फ इवेंट हैंडलर। मैं अपने अधिकांश कारर के लिए इस मॉडल में और उसके आसपास रहा हूं।

हर तरह से आपको अलग तरीके से सोचने पर मजबूर करता है। Smalltalk दृष्टिकोण के साथ, आपका डोमेन स्मार्ट है जबकि आपका GUI गूंगा है। डिफ़ॉल्ट VisualStudio दृष्टिकोण के साथ, आपका GUI स्मार्ट है जबकि आपका डोमेन मॉडल (यदि यह मौजूद है) बल्कि एनीमिक है।

कई डेवलपर्स जो कि मैं स्मॉलटाक दृष्टिकोण में मूल्य देखता हूं, और विज़ुअलस्टडियो वातावरण में उस दृष्टिकोण को ढालने की कोशिश करता हूं। WPF में कुछ गतिशील बाध्यकारी विशेषताएं हैं जो इसे संभव बनाती हैं; लेकिन सीमाएँ हैं। अनिवार्य रूप से डोमेन मॉडल में शामिल कुछ कोड जीयूआई कक्षाओं में समाप्त होता है।

तो, आप अपना कोड किस तरीके से डिजाइन / विकसित करते हैं? क्यों?

  • पहले जीयूआई। उपयोगकर्ता सहभागिता सर्वोपरि है।
  • डोमेन पहले। मुझे यह सुनिश्चित करने की आवश्यकता है कि सिस्टम को सही करने से पहले हम उस पर एक यूआई डाल दें।

किसी भी दृष्टिकोण के लिए पेशेवरों और विपक्ष हैं। डोमेन मॉडल वहाँ क्रिस्टल कैथेड्रल और आकाश में पाई के साथ फिट बैठता है। जीयूआई वहाँ त्वरित और गंदे (कभी-कभी वास्तव में गंदे) के साथ फिट बैठता है।

और एक अतिरिक्त बोनस के लिए: आप कैसे सुनिश्चित करते हैं कि कोड बनाए रखने योग्य है?


आप ऐसा कर सकते हैं कि जावा में - एक ढांचा बनाएं और यूआई तत्वों को विधियों / क्षेत्रों में बाँधने के लिए एक्सएमएल का उपयोग करें। मुझे नहीं लगता कि यह इतना मुश्किल होगा - प्रतिबिंब शक्तिशाली शक्तिशाली है। महान प्रश्न, btw - आपको लगता है कि बहुत कठिन है।
माइकल के

जावा के साथ, JGoodies नामक एक पुस्तकालय है जिसमें जावाबाइन्स के लिए वास्तव में अच्छा बाध्यकारी सुविधा है। यह एकमात्र कारण है जो मैंने कभी भी जावाबीन के साथ कोई मूल्य नहीं देखा है, और संभवतः आपको जीयूआई बनाने के स्मॉलटॉक के करीब पहुंचता है। jgoodies.com
बेरिन लोरिट्श

जवाबों:


5

वर्षों से मैं सॉफ्टवेयर विकसित कर रहा हूं, मैंने खुद को पहली दोनों कार्यप्रणाली का अभ्यास करने के लिए पाया क्योंकि हमेशा ध्यान में रखने के लिए एक "मध्यम जमीन" है। UI कोड और व्यवसाय कोड के बीच एक इंटरफ़ेस रखें, और इस समय डोमेन से UI की आवश्यकता पर एक समझौता करें।

मुझे इस अवधारणा को स्पष्ट करने के लिए एक आकृति बनाते हैं:

  +------+
  |  UI  | <- Think about how to make an effective user interface
  +------+
      |
      |
 +----------+
 | Contract | <--- This part over here is really REALLY important, man!
 +----------+
      |
      |
+--------------+
| Domain model | <- Think about what the user needs
+--------------+ 

इस तरह से आप यूआई और डोमेन मॉडल पर अलग-अलग काम कर सकते हैं अगर बीच का मैदान यूआई को प्राप्त होने वाले डेटा पर स्पष्ट कर देता है।

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

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


यह इस कारण से है कि सूक्ष्म कीड़े कुछ कोड में क्रेप हैं जिन्हें मैं बनाए रखने में मदद कर रहा हूं।
बेरिन लोरिट्श

3

डोमेन पहले। मुझे यह सुनिश्चित करने की आवश्यकता है कि सिस्टम को सही करने से पहले हम उस पर एक यूआई डाल दें।

सरल मामलों को छोड़कर - काम करने के लिए और कुछ नहीं किया जा सकता है।

यूआई से शुरू होने से अक्सर नाजुक, छोटी गाड़ी का सॉफ्टवेयर होता है जो देखने में मजेदार लग सकता है, लेकिन अक्सर मॉडल में गंभीर समस्याएं होती हैं।

ऐसा नहीं है कि यूआई पहले विफलता के लिए बर्बाद है - यदि मॉडल काफी सरल है तो यूआई को पहले इस विश्वास के साथ बनाया जा सकता है कि मॉडल अंत में ठीक काम करेगा।

किसी भी मामले में जहां मॉडल की आसानी से कल्पना नहीं की जा सकती है, इसे पहले बनाया जाना चाहिए।

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


यूआई विकसित करते समय मैं कम परवाह कर सकता था कि डेटा तब तक कैसा दिखता है जब तक वह वहां है। मैं डेटा को एक वांछित संरचना में रखने के लिए अमूर्तता की एक परत जोड़ सकता हूं ... अपने आप को बैक एंड कार्यान्वयन विवरणों से बांधकर सड़क की समस्याओं के बारे में पूछ रहा हूं।
आरोन मैकाइवर

@ ऐरन: तुम शानदार हो। पिछले 30 वर्षों में, मुझे किसी के साथ काम करने का सौभाग्य नहीं मिला है। मुझे झपकी नहीं आ रही है। यह केवल मेरा अनुभव है कि जब जीयूआई पहले किया गया था, तो आवेदन को काम करने, बनाए रखने या अनुकूलित करने के लिए नहीं किया जा सकता था। मुझे एक से अधिक "तकनीकी समीक्षा" पर होना पड़ा है, जहां नौकरी यह पता लगाने के लिए थी कि किसको बर्खास्त करना है क्योंकि जीयूआई को काम करने के लिए नहीं बनाया जा सकता है। आपका अनुभव विलक्षण है।
एस.लॉट

2

यह वास्तव में हाथ पर आवेदन पर निर्भर करता है।

यदि आप एक बंद क्लाइंट / सर्वर एप्लिकेशन का निर्माण कर रहे हैं, तो या तो दृष्टिकोण पर्याप्त होगा; जैसा कि आप बैक एंड को जोड़ तोड़ करने जा रहे हैं ताकि सामने वाले को अनिवार्य रूप से ज़रूरत हो।

यदि आप एक खुले ग्राहक / सर्वर एप्लिकेशन का निर्माण कर रहे हैं, जहां आपके ग्राहकों द्वारा उपयोग के लिए एक संभावित वेब सेवा को उजागर किया जाएगा, तो इस बात पर जागरूक होना कि ग्राहक द्वारा एक फ्रंट एंड विकसित करने के लिए उस सेवा का उपयोग कैसे किया जा सकता है, महत्वपूर्ण है।

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

आपने उल्लिखित किया था...

... WPF में कुछ गतिशील बाध्यकारी विशेषताएं हैं जो इसे संभव बनाती हैं; लेकिन सीमाएँ हैं। अनिवार्य रूप से कुछ कोड जो डोमेन मॉडल में हैं, GUI कक्षाओं में समाप्त होते हैं ...

नहीं यकीन है कि आप कुछ से क्या मतलब है ? WPF और SL दोनों को उनकी बाध्यकारी कार्यक्षमता के लिए जाना जाता है। यह अंतहीन है। अगर आपको MVVM आधारित WPF एप्लिकेशन में अपने व्यू के भीतर कोड रखने के लिए मजबूर किया जा रहा है, तो कुछ की जरूरत है। संलग्न व्यवहार दृश्य के भीतर घटनाओं में बांधने के बिना व्यवहार को लागू करने का एक तरीका है, साथ ही आपके दृश्य को आश्वस्त करने में कई अन्य दृष्टिकोण साफ रहते हैं।

उपयोगकर्ता अंतःक्रिया रुख से सामने के छोर का बैक एंड कार्यान्वयन से कोई लेना- देना नहीं होना चाहिए । फ्रंट एंड के लिए बैक एंड एकमात्र जॉब है जो प्रोसेसिंग डेटा या अन्य माध्यमों से डेटा की आपूर्ति करता है। यह वापस विकसित हो रहे अनुप्रयोग के प्रकार से जुड़ जाता है।

सुनिश्चित करें कि स्रोत कोड बनाए रखना वास्तव में और अपने आप में एक पूरी तरह से अलग सवाल है। उच्च स्तर पर यह सिद्ध पैटर्न, आर्किटेक्चर और प्रौद्योगिकियों के साथ-साथ सर्वोत्तम कोडिंग प्रथाओं से संबंधित है।


मैं कुछ कहता हूं क्योंकि स्मॉलटाक दृष्टिकोण की तुलना में यह बहुत बोझिल है। मैं मानता हूं कि मेरे लिए WPF के बारे में जानने के लिए बहुत कुछ है, यह देखते हुए कि मैंने पिछले साल के मध्य में इसका उपयोग शुरू किया था।
बेरिन लोरिट्श

2

मैं मूल UI को पहले डिजाइन करना पसंद करता हूं (भले ही यह सिर्फ कागज पर हो), ग्राहक से इनपुट के साथ। ग्राहक वास्तव में नहीं जान सकते कि वे क्या चाहते हैं जब तक वे इसे नहीं देखते। आप हमेशा विश्वास नहीं कर सकते कि ग्राहक आपको क्या बताता है। आप सप्ताह में एक मजबूत डोमेन मॉडल लिखने के लिए निवेश कर सकते हैं, यह पता लगाने के लिए कि वे यूआई प्रोटोटाइप को देखने के बाद ग्राहक के आंकड़ों में फिट नहीं होते हैं।


1

हम अपने सॉफ़्टवेयर को स्वचालित परीक्षणों से चलाने का प्रयास करते हैं। स्वचालित यूआई परीक्षण बहुत समय लेने वाला है। कंसोल पर कुछ मानों की जाँच करने का प्रयास आसान है।

इसे ध्यान में रखते हुए, हम व्यावसायिक तर्क को UI से अलग रखने के लिए काफी सावधान हैं।

मुझे याद है कि एक बार मेरे पास भी एक लीडर येलर था, जिसे डॉक्यूमेंट / व्यू आर्किटेक्चर अप्रचलित माना जाता था जब मैंने सुझाव दिया था कि हमें यूआई के साथ अपने सभी बिजनेस कोड को बंद करने की जरूरत है (और हम उस समय C ++ में win32 का उपयोग कर रहे थे, इसलिए यह ड्रैग एंड ड्रॉप प्रोग्रामिंग बात हमारी समस्या की भी नहीं थी)। मैं बस गूंगा था।

IMNSHO, कम से कम एक व्यापार बनाम यूआई परत नहीं होने का कोई बहाना नहीं है। यदि आपका उत्पाद कुछ भी दिलचस्प करता है, तो इस जुदाई के लिए कोड का पुन: उपयोग करना आवश्यक है।


0

C # डेवलपर के रूप में, मुझे निश्चित रूप से नहीं लगता कि आप बाहर काम करने में कबूतर हैं। मैं वास्तव में पहले डोमेन-मॉडल करना पसंद करता हूं।

WPF के लिए, मेरे द्वारा वर्णित मॉडल का एकमात्र नकारात्मक पहलू यह है कि, आपको कभी-कभी अपने UI और अपने डोमेन मॉडल के बीच मध्यस्थता करने की आवश्यकता होती है। फिर भी, जबकि वह कभी-कभी अधिक काम का मतलब है, इसका मतलब क्लीनर कोड भी है।


0

निश्चित रूप से, पहले डोमेन!

स्मॉलटाक की सुंदरता आप बहुत आसानी से एक डोमेन मॉडल को कई तरह से "ड्राइव" कर सकते थे, जिसमें कार्यक्षेत्र या इंस्पेक्टर से "प्रिंट" कराना भी शामिल था। केवल जब आप सुनिश्चित थे कि आपका डोमेन वांछित प्रदर्शन कर रहा था, तो आपने पूर्ण GUI के निर्माण पर ध्यान केंद्रित करने की हिम्मत की।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.