श्वास।
व्यापक आम सहमति नहीं होगी; व्यापार परत और नियंत्रक/वेब परत को अलग-अलग बनाए रखा जाना चाहिए, क्योंकि वे अलग-अलग चिंताओं हैं।
तथ्य यह है कि, आप इसे "शुद्धता बनाम वास्तविकता" प्रश्न के रूप में लेबल करते हैं जो अविश्वसनीय रूप से कम दिखने वाला और थोड़ा अप्रिय है। यह सवाल पूछने के बिंदु को भी खारिज कर देता है; यदि आप विचारों को प्रस्तुत करने पर विचार नहीं करेंगे, तो उन्हें क्यों मांगें?
यह सच है कि चीज़ों को थोड़ा और सावधानीपूर्वक ऊपर से अलग करने के लिए आगे के आगे के प्रयास की आवश्यकता होती है, अधिक समय, और आखिरकार थोड़ा और खर्च हो सकता है। यह भी सच है कि आप ऐसा करने से किसी भी तत्काल लाभ को समझने में सक्षम नहीं हो सकते हैं। हालांकि, कई दशकों तक बड़ी संख्या में प्रोग्रामर के बीच साझा की गई सोब कहानियों की एक संपत्ति से पता चलता है कि, जहां संभव हो, आपकी तथाकथित "शुद्धता" दर्द को कम करती है, पांच साल नीचे लाइन; भगवान; आपको वास्तव में नीचे हटना होगा और थोड़ा सा रिफैक्टरिंग करना होगा, और यह उन सभी दरारों के कारण दूरस्थ रूप से सुखद नहीं है, जिनके माध्यम से आपकी ज़िम्मेदारियां झुका रही हैं।
वेब अनुप्रयोग के लिए परतों की कल्पना करने का थोड़ा बेहतर तरीका प्रस्तुति, बातचीत, व्यवसाय नियम और डेटा पर विचार करना पड़ सकता है; ऊपर से नीचे तक। आपका डेटा डेटाबेस, डेटा एक्सेस इत्यादि है और व्यवसाय नियम उस डेटा पर किसी भी अतिरिक्त बाधाओं को लागू करते हैं, वैलिएशन, गणना आदि को संभालते हैं।तब प्रस्तुति परत (जो मूल रूप से आपका यूजर इंटरफेस है) और व्यापार तर्क के बीच शाखाएं, आपके आवेदन को चलाने वाले उपयोग मामलों का प्रदर्शन करती हैं।
इस बिंदु तक, उपयोगकर्ता इंटरफ़ेस सभी अपरिवर्तनीय है; इससे कोई फर्क नहीं पड़ता कि उपयोगकर्ता कमांड लाइन एप्लिकेशन में ग्राहक डेटा दर्ज कर रहा है या कह सकता है, या सत्र में संग्रहीत डेटा के साथ कुछ मल्टी-पेज वेब फॉर्म पर नेविगेट कर रहा है। मान लीजिए कि आप बाद वाले को चुनते हैं; उस पर एक वेब फ्रंट एंड छड़ी। अब आप किस चिंतित हैं, अनुरोधित डेटा को पुनर्प्राप्त करने और इसे उपयोगकर्ता को प्रस्तुत करने के लिए अपेक्षाकृत सरल कोड लिख रहा है। मुद्दा है, आपका वेब अनुप्रयोग; फ्रंट एंड, कि आपका संपूर्ण यूजर इंटरफेस है; सत्र और सब कुछ। केवल उस बिंदु पर जहां आप कहने के लिए तैयार हैं, "अरे, चलो उस ग्राहक डेटा को डेटाबेस में चिपकाएं" क्या आप जाते हैं और उन ओह-प्यार से तैयार की गई सेवा परतों का आह्वान करते हैं, जो आपके वेब एप्लिकेशन के प्रत्येक बिट जानकारी को पास करते हैं रखे; उपयोगकर्ता इनपुट, परिवर्तन करने वाले उपयोगकर्ता का नाम; वह बकवास है। और आपकी सेवा परत इसके साथ सौदा करती है। या, वैकल्पिक रूप से, बिट्स 'कारण आप एक आवश्यक फ़ील्ड भूल गए हैं।
क्योंकि आपने साफ-अलग चीजों को अलग कर दिया है, जैसा कि अन्य लोगों ने सुझाव दिया है, किसी भी अन्य अनुप्रयोग में उपयोग करने के लिए पुनर्निर्मित (या "उधार") किया जा सकता है, और सेवा परत बनी हुई है, स्टेटलेस, साफ, और चीजों को संभालने के लिए तैयार है। और यह आपकी मान्यता करता है, और इसलिए आपका सत्यापन हर जगह सुसंगत है। लेकिन यह नहीं जानता कि वेब फ्रंटेंड, या कंसोल एप्लिकेशन, या टर्मिनल पर चल रहे फैंसी समृद्ध क्लाइंट एप्लिकेशन में कौन लॉग इन है, और इसकी परवाह नहीं है, क्योंकि यह विवरण केवल उन अनुप्रयोगों के लिए महत्वपूर्ण है।
नया सत्यापन नियम जोड़ने की आवश्यकता है? कोई बात नहीं; सेवा परत को सत्यापन करें, और उपयोगकर्ता इंटरफ़ेस चिंताओं को श्रृंखला में आवश्यक उच्चतम के रूप में संभाल लें। किसी चीज की गणना के तरीके को बदलने की आवश्यकता है? व्यापार परत पर बदलें। कुछ और प्रभावित होने की जरूरत नहीं है।
सभी उत्तरों के लिए धन्यवाद। मुख्य चिंता जो मैंने आपको देखा है, वह है यदि आवश्यक हो तो व्यापार परत को "स्विच" करने की क्षमता है। मेरा ऐप हमेशा वेब पर चलाएगा, इसलिए सत्र हमेशा अप्रचलित हो जाएगा, सत्र सत्र अप्रचलित होने तक, इसलिए यह चिंता का विषय नहीं है। – sarsnake
तो कोई इकाई परीक्षण नहीं? – Robert
आप कह रहे हैं कि यह हमेशा एक वेब पेज होगा एक कार्यान्वयन विस्तार ... डिजाइन में ध्यान में नहीं रखा जाना चाहिए। – CSharpAtl