एमवीसी डिजाइन में व्यावसायिक तर्क कहां रखें?


44

मैंने एक साधारण MVC जावा एप्लिकेशन बनाया है जो डेटा फॉर्म के माध्यम से डेटाबेस में रिकॉर्ड जोड़ता है।

मेरा ऐप डेटा एकत्र करता है, यह इसे सत्यापित करता है और इसे संग्रहीत करता है। ऐसा इसलिए है क्योंकि अलग-अलग उपयोगकर्ताओं से डेटा ऑनलाइन प्राप्त किया जा रहा है। डेटा ज्यादातर प्रकृति में संख्यात्मक है।

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

मुझे वह डेटा चाहिए जो मैंने डेटाबेस में रिकॉर्ड के रूप में डाला था, उस पर गणना करके काम किया। मूल डेटा अप्रभावित रहना चाहिए, जबकि नए डेटा, पोस्ट-गणना, को डेटाबेस में एक नए निकाय रिकॉर्ड के रूप में संग्रहीत किया जाना चाहिए।

मुझे इस पृष्ठभूमि की गणना के लिए कोड कहां लिखना चाहिए? जैसा कि यह नियम और व्यावसायिक तर्क है, क्या मुझे इसे नई JavaBeans फ़ाइलों में रखना चाहिए?


जवाबों:


83

व्यापार तर्क में रखा जाना चाहिए मॉडल , और हम वसा के लिए लक्ष्य होना चाहिए मॉडल और पतला नियंत्रकों

एक शुरुआत बिंदु के रूप में, हमें नियंत्रक तर्क से शुरू करना चाहिए। उदाहरण के लिए: अद्यतन करने पर , आपके नियंत्रक को आपके कोड को उस पद्धति / सेवा पर निर्देशित करना चाहिए जो आपके परिवर्तनों को मॉडल में वितरित करती है

मॉडल में, हम आसानी से सहायक / सेवा कक्षाएं बना सकते हैं, जहां एप्लिकेशन व्यावसायिक नियमों या गणनाओं को मान्य किया जा सकता है।

एक वैचारिक सारांश

  • नियंत्रक अनुप्रयोग तर्क के लिए है। वह तर्क जो आपके एप्लिकेशन "ज्ञान के डोमेन" के साथ सहभागिता करना चाहता है, इसके लिए विशिष्ट है।

  • मॉडल तर्क आवेदन से स्वतंत्र है के लिए है । यह तर्क "ज्ञान के डोमेन" के सभी संभावित अनुप्रयोगों में मान्य होना चाहिए।

  • इस प्रकार, सभी व्यावसायिक नियमों को मॉडल में रखना तर्कसंगत है।


3
अच्छा स्पष्ट और संक्षिप्त उत्तर ..
हेंज़ोलो

@ युसुबोव, क्या आप मुझे एप्लिकेशन लॉजिक और बिजनेस लॉजिक के बीच का अंतर बता सकते हैं
मोहम्मद

1
@Moh, संक्षेप में ये एक अनुप्रयोग में प्रौद्योगिकी के स्तरों का वर्णन करने में मदद करने के लिए शब्द हैं। व्यावसायिक तर्क मूल रूप से कार्यात्मक विनिर्देशों के अनुसार प्रणाली के नियम हैं। उदाहरण के लिए ऑब्जेक्ट A के प्रकार B ने C और D को जिम्मेदार ठहराया होगा, लेकिन नहीं। E. अनुप्रयोग तर्क एक तकनीकी विनिर्देश से अधिक है, जैसे कि ओरेकल डेटाबेस को बनाए रखने के लिए जावा सर्वलेट्स और ओजेबी का उपयोग करना।
ईएल यूसुबोव

क्या आप इन शब्दों को विस्तार से बताएंगे : The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer.[ php-html.net/tutorials/model-view-controller-in-php ]
रेवो

1
यदि मैं सही समझा, उल्लेखित लेख 'आवेदन तर्क' को 'व्यावसायिक तर्क' के रूप में संदर्भित करता है। इस प्रकार, व्यापारिक तर्क को संदर्भित करने वाली कोई भी चीज को नियंत्रक या दृश्य में नहीं रखा जाना चाहिए।
ईएल यूसुबोव

20

हमेशा की तरह, यह परियोजना की जटिलता पर निर्भर करता है।

तुच्छ अनुप्रयोगों में, जहां डोमेन मॉडल की जटिलता अपेक्षाकृत छोटी है, आप मॉडल में तर्क डाल सकते हैं और इसे एक दिन कह सकते हैं।

हालांकि, जटिल मॉडल और बहुत सारे व्यावसायिक नियमों के साथ गैर तुच्छ अनुप्रयोगों के लिए, चीजों को थोड़ा और अलग करना बेहतर है।

यदि आप व्यावसायिक तर्क रखते हैं जिसमें एक मॉडल में एक से अधिक मॉडल शामिल हैं, तो आप उन मॉडलों के बीच एक तंग युग्मन शुरू कर रहे हैं। जैसे-जैसे एप्लिकेशन बढ़ते जाते हैं, ये मॉडल god modelsबहुत अधिक जानते हुए, बदल जाते हैं । और यह जल्दी से एक बड़ी गड़बड़ी में बदल जाएगा जो परीक्षण और बनाए रखने के लिए कठिन है। तो उस स्थिति में, तर्क को एक अलग परत में रखना फायदेमंद है।

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

रॉबर्ट मार्टिन (अंकल बॉब) का इस विषय पर एक अच्छा ब्लॉग पोस्ट है: द क्लीन आर्किटेक्चर।


यह प्रश्न MVC के लिए विशिष्ट था। व्यापार तर्क हमेशा मॉडल में होना चाहिए। नियंत्रक सिर्फ एक एडाप्टर है।
5:42 बजे jgauffin

6
एमवीसी उद्योग में सबसे अधिक अधिभारित शर्तों में से एक है। मैं इस शब्द के उद्धरण में नहीं आना चाहता, क्योंकि यह एक पुस्तक का वारंट है। बस, MVC का उपयोग करने का अर्थ यह नहीं है कि आपको हर तर्क को मॉडल में रखना चाहिए।
हकन डेरेल

1
स्टीव बुर्बेक (स्मालटाक टीम) द्वारा परिभाषा से The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate:। यह एक एडॉप्टर परिभाषा है।
jgauffin

4
यदि आप सभी तर्क को मॉडल में रखते हैं, तो आप बिना किसी गड़बड़ के हजारों लाइनों के साथ समाप्त हो जाएंगे। वहाँ गया। उपयोगिता कक्षाएं और सेवा परत रखना कोई पाप नहीं है।
Asthasr

मुझे लगता है कि jgauffin को क्या मिल रहा था, यह प्रश्न MVC के लिए विशिष्ट है। यदि हम एमवीसी के दृष्टिकोण और केवल एमवीसी के दृष्टिकोण से प्रणाली को देखने के लिए सहमत हैं, तो हाँ, सभी व्यावसायिक तर्क "मॉडल" में हैं, लेकिन "मॉडल" में "उपयोगिता कक्षाएं" सहित कई कक्षाएं और परतें शामिल हो सकती हैं। "एक सेवा परत"। इसे दूसरे तरीके से रखने के लिए, हम यह नहीं कहेंगे कि सर्विस लेयर कंट्रोलर या व्यू का एक हिस्सा है, इसलिए सबसे अच्छा मॉडल है।
डेविड

5

मॉडल के अंदर व्यावसायिक तर्क को रखना सबसे अच्छा तरीका हो सकता है। कंट्रोलर को रिमोट वेब ऐप से कॉल मिलती है। MVC वेब सेवा पर नियंत्रक कॉल लेता है और बीएल में एक विधि के लिए निष्पादन को पुनर्निर्देशित करता है। अब, बिजनेस लॉजिक को 'मॉडल' में समाहित किया जा सकता है, लेकिन इसे किसी अन्य फ़ोल्डर में भी रखा जा सकता है, जैसे कि 'बिजनेस लॉजिक' । इसलिए व्यापार तर्क जहां होने जा रहा है, वहां कोई कठिन-से-तेज नियम नहीं है।

मैं MVC 3.0 पर निर्मित एक वेब सेवा का उपयोग कर रहा हूं और व्यापार तर्क का कंटेनर MVC MODEL है


मैं सहमत हूँ। जब आपका मॉडल केवल अन्य व्यावसायिक तर्क वर्गों द्वारा कार्य किया जाने वाला डेटा संरचना होता है, तो आपको अधिक लचीला अनुप्रयोग मिलता है। एक साधारण उदाहरण के रूप में, मुझे लगता है कि ASP.NET की विशेषताओं की मान्यता द्वारा मान्यता के दृष्टिकोण की एक बड़ी विफलता है। यदि मैं आवश्यक विशेषता के साथ किसी व्यक्ति के FirstName गुण की व्याख्या करता हूं, तो क्या होगा यदि मैं एक व्यवस्थापक दृश्य बनाता हूं जहां FirstName की आवश्यकता नहीं होनी चाहिए? एक व्यावसायिक तर्क परत को मॉडल का उपभोग करना चाहिए और इसके लिए उपयुक्त कार्यों का निर्धारण करना चाहिए।
xr280xr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.