रूबी ऑन रेल डेवलपमेंट (या सामान्य रूप से एमवीसी) में, मुझे तर्क देने के लिए किस त्वरित नियम का पालन करना चाहिए।
कृपया जवाब दें - क्या आप इसे यहां नहीं डालते हैं , इसके बजाय इसे यहां रखें ।
रूबी ऑन रेल डेवलपमेंट (या सामान्य रूप से एमवीसी) में, मुझे तर्क देने के लिए किस त्वरित नियम का पालन करना चाहिए।
कृपया जवाब दें - क्या आप इसे यहां नहीं डालते हैं , इसके बजाय इसे यहां रखें ।
जवाबों:
MVC
नियंत्रक : यहां वह कोड डालें जो उपयोगकर्ता को चाहिए, और यह तय करने के लिए कि उन्हें क्या देना है, क्या वे लॉग इन हैं, क्या उन्हें कुछ डेटा देखना चाहिए, आदि के साथ काम करना है। अंत में, नियंत्रक अनुरोधों को देखता है। और क्या डेटा (मॉडल) दिखाने के लिए और क्या दृश्य प्रस्तुत करने के लिए काम करता है। यदि आपको संदेह है कि क्या कोड नियंत्रक में जाना चाहिए, तो यह संभवतः नहीं होना चाहिए। अपने नियंत्रकों को पतला रखें ।
दृश्य : दृश्य में केवल आपके डेटा (मॉडल) को प्रदर्शित करने के लिए न्यूनतम कोड होना चाहिए, यह बहुत सारे प्रसंस्करण या गणना नहीं करना चाहिए, यह मॉडल द्वारा गणना की गई डेटा (या संक्षेप) प्रदर्शित करना चाहिए, या नियंत्रक से उत्पन्न होना चाहिए। यदि आपके दृश्य को वास्तव में प्रसंस्करण करने की आवश्यकता है जो मॉडल या नियंत्रक द्वारा नहीं किया जा सकता है, तो कोड को एक हेल्पर में डालें। एक दृश्य में बहुत सारे रूबी कोड पन्नों को पढ़ने में कठिन बनाते हैं।
मॉडल : आपका मॉडल ऐसा होना चाहिए जहां आपका सारा कोड आपके डेटा से संबंधित हो (ऐसी संस्थाएं जो आपकी साइट बनाती हैं जैसे उपयोगकर्ता, पोस्ट, अकाउंट, मित्र आदि) रहती हैं। यदि कोड को आपकी संस्थाओं से संबंधित डेटा को सहेजना, अपडेट या सारांशित करना है, तो इसे यहां रखें। यह आपके दृश्य और नियंत्रकों में पुन: प्रयोग करने योग्य होगा।
पॉलिफ़ोनिक के उत्तर में जोड़ने के लिए:
हेल्पर : दृश्य को आसान बनाने के लिए कार्य करता है। उदाहरण के लिए, यदि आप हमेशा अपनी कीमत प्रदर्शित करने के लिए विगेट्स की सूची से अधिक पुनरावृत्ति कर रहे हैं, तो इसे एक सहायक (वास्तविक प्रदर्शन के लिए आंशिक के साथ) में डालें। या यदि आपके पास आरजेएस का एक टुकड़ा है जो आप दृश्य को अव्यवस्थित नहीं करना चाहते हैं, तो इसे एक सहायक में डाल दें।
MVC पैटर्न वास्तव में केवल UI से संबंधित है और कुछ नहीं। आपको नियंत्रक में कोई जटिल व्यावसायिक तर्क नहीं रखना चाहिए क्योंकि यह दृश्य को नियंत्रित करता है लेकिन तर्क को नहीं। नियंत्रक को उचित दृश्य का चयन करने और डोमेन मॉडल (मॉडल) या व्यावसायिक परत को अधिक जटिल सामान सौंपने के साथ ही चिंता करनी चाहिए।
डोमेन ड्रिवेन डिज़ाइन में सेवाओं की एक अवधारणा है जो एक ऐसी जगह है जहाँ आप तर्क छड़ी करते हैं जिसे कई प्रकार की विभिन्न वस्तुओं को ऑर्केस्ट्रेट करने की आवश्यकता होती है जिसका आम तौर पर तर्क होता है जो स्वाभाविक रूप से मॉडल वर्ग पर नहीं होता है।
मैं आमतौर पर सेवा की परत को अपने अनुप्रयोगों के एपीआई के रूप में सोचता हूं। मेरी सेवाएं परतें आमतौर पर एप्लिकेशन की आवश्यकताओं के लिए बहुत बारीकी से मैप करती हैं, इस प्रकार मैं बना रहा हूं सेवा परत मेरे ऐप के निचले स्तरों में पाए जाने वाले अधिक जटिल इंटरैक्शन के सरलीकरण के रूप में कार्य करता है, अर्थात आप सेवा परतों को दरकिनार करके एक ही लक्ष्य पूरा कर सकते हैं। लेकिन आपको इसे काम करने के लिए बहुत अधिक लीवर को खींचना होगा।
ध्यान दें कि मैं रेल के बारे में बात नहीं कर रहा हूँ यहाँ मैं एक सामान्य स्थापत्य शैली के बारे में बात कर रहा हूँ जो आपकी विशेष समस्या का समाधान करती है।
यहाँ पहले से ही सही व्याख्या, निष्कर्ष के रूप में एक बहुत ही सरल वाक्य और याद रखना आसान है:
हमें स्मार्ट मॉडल्स, THIN कंट्रोलर्स और DUMB व्यूज की जरूरत है।
रेल का रास्ता पतला नियंत्रक और वसा मॉडल है ।
कंट्रोलर / एक्सेस कंट्रोल से संबंधित सामान कंट्रोलर में रखें।
मॉडल आपके डेटा के बारे में हैं। मान्यता, संबंध, CRUD, व्यापार तर्क
दृश्य आपके डेटा को दिखाने के बारे में हैं। केवल इनपुट और प्रदर्शन करें।
नियंत्रक आपके मॉडल से आपके दृश्य में (और कौन सा दृश्य) और आपके दृश्य से आपके मॉडल पर जाने वाले डेटा को नियंत्रित करने के बारे में हैं। नियंत्रक बिना मॉडल के भी मौजूद हो सकते हैं।
मैं एक सुरक्षा गार्ड / रिसेप्शनिस्ट के रूप में नियंत्रक के बारे में सोचना पसंद करता हूं जो आपको ग्राहक (अनुरोध) को उचित काउंटर पर निर्देशित करता है जहां आप एक प्रश्नकर्ता (दृश्य) से एक प्रश्न पूछते हैं। टेलर (देखें) तब जाता है और एक प्रबंधक (मॉडल) से जवाब मिलता है, जिसे आप कभी नहीं देखते हैं। आप अनुरोध फिर से सिक्योरिटी गार्ड / रिसेप्शनिस्ट (कंट्रोलर) के पास जाते हैं और तब तक इंतजार करते हैं, जब तक कि आपको एक और टेलर (देखने) के लिए निर्देशित न कर दिया जाए, जो आपको जवाब बताता है कि मैनेजर (मॉडल) ने उन्हें दूसरे टेलर (व्यू) के सवाल के जवाब में बताया था ।
इसी तरह अगर आप टेलर (दृश्य) को कुछ बताना चाहते हैं, तो मोटे तौर पर ऐसा ही होता है सिवाय दूसरे टेलर के आपको बताएगा कि क्या प्रबंधक ने आपकी जानकारी को स्वीकार किया है। यह भी संभव है कि सिक्योरिटी गार्ड / रिसेप्शनिस्ट (कंट्रोलर) ने आपको जानकारी देने के लिए कहा हो क्योंकि आप मैनेजर को उस जानकारी को बताने के लिए अधिकृत नहीं थे।
इसलिए रूपक का विस्तार करने के लिए, मेरी रूढ़िबद्ध और अवास्तविक दुनिया में, टेलर (विचार) बहुत सुंदर हैं, लेकिन खाली-सिर वाले हैं और अक्सर कुछ भी मानते हैं जो आप उन्हें बताते हैं, सुरक्षा गार्ड / रिसेप्शनिस्ट न्यूनतम विनम्र हैं, लेकिन बहुत ज्ञानी नहीं हैं, लेकिन जानते हैं कि लोगों को कहां और क्या करना चाहिए नहीं जाना चाहिए और प्रबंधकों वास्तव में बदसूरत और मतलब है, लेकिन सब कुछ जानते हैं और बता सकते हैं कि क्या सच है और क्या नहीं है।
एक चीज जो ठीक से अलग होने में मदद करती है, वह है "प्रतिमान से स्थानीय चर पास से बचने के लिए" विरोधी पैटर्न। इसके अलावा:
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
def show
@foo = Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= @foo.bar %>
...
इसे एक सहायक के रूप में उपलब्ध एक गेटर तक ले जाने की कोशिश करें:
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
helper_method :foo
def show
end
protected
def foo
@foo ||= Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= foo.bar %>
...
इससे "@foo" में क्या डाला जाता है और इसे कैसे उपयोग किया जाता है, इसे संशोधित करना आसान हो जाता है। यह किसी भी अधिक जटिल बनाने के बिना नियंत्रक और दृश्य के बीच अलगाव को बढ़ाता है।
foo
और @foo
समान हैं - वे दोनों को <नियंत्रकक्लास, अनुरोध> जोड़ी के लिए स्कोप किया गया है। इसके अतिरिक्त, गेट्टर संस्करण का उपयोग करके, मैं यह बदल सकता हूं कि उस Foo
वस्तु को कैसे पाया / संग्रहीत / कैश किया गया है, बिना यह देखे बिना कि यह कैसे पहुंचता है।
खैर, यह इस बात पर निर्भर करता है कि तर्क के साथ क्या करना है ...
अक्सर, यह आपके मॉडल में अधिक चीजों को धक्का देने के लिए समझ में आता है, नियंत्रक को छोटा करता है। यह सुनिश्चित करता है कि इस तर्क को आसानी से कहीं से भी उपयोग किया जा सकता है जो आपके मॉडल का प्रतिनिधित्व करने वाले डेटा तक पहुंचने के लिए आवश्यक है। दृश्यों में लगभग कोई तर्क नहीं होना चाहिए। तो वास्तव में, सामान्य तौर पर, आपको इसे बनाने का प्रयास करना चाहिए ताकि आप खुद को दोहराएं नहीं।
इसके अलावा, Google के त्वरित बिट से पता चलता है कि कहां जाता है।
मॉडल: सत्यापन की आवश्यकताएं, डेटा संबंध, विधियां बनाना, विधियां अद्यतन करना, विधियां नष्ट करना, विधियां ढूंढना (ध्यान दें कि आपके पास न केवल इन विधियों के सामान्य संस्करण होने चाहिए, लेकिन अगर ऐसा कुछ है जो आप बहुत कुछ कर रहे हैं, जैसे कि लाल रंग वाले लोगों को खोजना अंतिम नाम से बाल, फिर आपको उस तर्क को निकालना चाहिए ताकि आपको बस इतना करना है कि find_redH_by_name ("स्मिथ") या ऐसा कुछ कहें)
दृश्य: यह सभी डेटा के प्रारूपण के बारे में होना चाहिए, न कि डेटा के प्रसंस्करण के लिए।
नियंत्रक: यह वह जगह है जहाँ डेटा प्रोसेसिंग जाता है। इंटरनेट से: "नियंत्रक का उद्देश्य उपयोगकर्ता द्वारा अनुरोध की गई कार्रवाई का जवाब देना है, उपयोगकर्ता द्वारा निर्धारित कोई भी पैरामीटर लें, डेटा को संसाधित करें, मॉडल के साथ बातचीत करें, और फिर अंतिम रूप में, अनुरोधित डेटा को अंतिम रूप में पास करें।" राय।"
उम्मीद है की वो मदद करदे।
सरल शब्दों में, आम तौर पर, मॉडल में टेबल (एस) से संबंधित सभी कोड होंगे, उनके सरल या जटिल संबंध (उन्हें कई तालिकाओं से जुड़े वर्गीय प्रश्न के रूप में सोचें), व्यापार तर्क का उपयोग करके परिणाम में आने के लिए डेटा / चर का हेरफेर। ।
नियंत्रकों के पास अनुरोधित नौकरी के लिए प्रासंगिक मॉडल की ओर कोड / संकेत होंगे।
दृश्य उपयोगकर्ता इनपुट / इंटरैक्शन को स्वीकार करेंगे और परिणामी प्रतिक्रिया प्रदर्शित करेंगे।
इनमें से कोई भी बड़ा विचलन उस हिस्से पर अवांछित दबाव डालेगा और समग्र आवेदन प्रदर्शन प्रभावित हो सकता है।
परीक्षण, परीक्षण ... मॉडल में जितना संभव हो उतना तर्क रखें और फिर आप इसे ठीक से परख सकेंगे। इकाई परीक्षण डेटा का परीक्षण करता है और जिस तरह से यह मॉडल का परीक्षण करके बनता है, और कार्यात्मक परीक्षण नियंत्रक को परीक्षण करके जिस तरह से इसे नियंत्रित या नियंत्रित किया जाता है, इसलिए यह परीक्षण करता है कि आप डेटा की अखंडता का परीक्षण तब तक नहीं कर सकते जब तक कि यह न हो आदर्श।
जे