मेरे पास एक एमवीसी एप्लीकेशन है जो किसी फॉर्म से इनपुट प्राप्त करता है।
यह एक लॉगिन फॉर्म है इसलिए एकमात्र सत्यापन आवश्यक है यह जांचना है कि इनपुट खाली नहीं है या नहीं।
मॉडल से इसे पास करने से ठीक पहले मैं इसे नियंत्रक में मान्य करता हूं।
क्या यह सबसे अच्छा अभ्यास है या नहीं? क्या यह मॉडल से संबंधित है?इनपुट सत्यापन एक एमवीसी अनुप्रयोग में कहां से संबंधित है?
उत्तर
मुझे नहीं लगता कि एमवीसी पैटर्न के किसी भी हिस्से में सत्यापन सीमित करने वाला एक आधिकारिक सर्वोत्तम अभ्यास है। उदाहरण के लिए, आपका दृश्य जावास्क्रिप्ट का उपयोग करके कुछ ऊपर-सामने सत्यापन कर सकता है (और चाहिए)। आपके नियंत्रक को समान प्रकार के सत्यापन, साथ ही साथ अधिक व्यवसाय-तर्क संबंधित सत्यापन भी प्रदान करना चाहिए। मॉडल प्रमाणीकरण के रूप भी प्रदान कर सकता है, यानी, सेटर्स शून्य मानों की अनुमति नहीं दे रहे हैं।
इस at joelonsoftware की एक दिलचस्प चर्चा है।
यह सी ++ में एक वेब ढांचा है, कोई जावास्क्रिप्ट आवश्यक नहीं है। –
मुझे लगता है कि ऐप में कहीं कुछ जावास्क्रिप्ट है? जब तक यह एक पुरानी शैली वाली वेब-शैली वाली वेब ऐप या ढांचा नहीं है। –
वहाँ है लेकिन मैं इसे तब तक स्पर्श/कोड/संभाल नहीं लेता जब तक कि मैं वास्तव में वास्तव में वास्तव में नहीं चाहता :) इस ढांचे में दृश्य केवल विजेट बनाता है और प्रारंभ करता है और उन्हें रूट विजेट से जोड़ता है। हालांकि इसमें सत्यापन कार्य हो सकता है। तो दृश्य मान्य है कि डेटा खाली नहीं है, लेकिन मॉडल यह सत्यापित करने के लिए है कि इनपुट उपयोगकर्ता नाम और पासवर्ड सही हैं? –
इसका व्यावसायिक तर्क, इसलिए नहीं, यह मॉडल में शामिल नहीं है।
नीचे दिए गए उत्तर अन्यथा दावा करते हैं। कृपया विस्तृत करें और समझाएं कि आप ऐसा क्यों सोचते हैं। –
मैं शायद नीचे उल्लिखित मार्ग डारन जाना होगा। इस मामले में, यह आपकी सेवा परत में जाएगा। मूल रूप से, इस तरह के बारे में सोचें; एक खाली स्ट्रिंग को मॉडल द्वारा आपके ऊपर रखी गई बाधा की अनुमति नहीं दे रहा है? और यह यूआई चिंता नहीं है। तो यह एक व्यापार चिंता होना चाहिए; कोई उपयोगकर्ता खाली उपयोगकर्ता नाम से लॉग इन नहीं कर सकता है। – brian
उह। यदि मॉडल में एमवीसी ठीक से व्यवसाय तर्क है, तो दृश्य या नियंत्रक नहीं। एप्लिकेशन तर्क नियंत्रक में आता है, और दृश्य दृश्य है। तर्कसंगत सत्यापन व्यापार तर्क नहीं है बल्कि एप्लिकेशन तर्क है, लेकिन यह अलग-अलग बाल हैं। – Shayne
Business Logic -> Controller
Data Validation -> Model
उपर्युक्त उत्तर का कहना है कि यह व्यवसाय तर्क है इसलिए यह मॉडल से संबंधित नहीं है। आप कह रहे हैं कि यह सही है? मैं उलझन में हूँ। कृपया विस्तृत करें और समझाएं कि आप ऐसा क्यों सोचते हैं। –
मैं असहमत हूं। मैं कहूंगा: व्यापार तर्क -> डोमेन; उपयोगकर्ता इंटरफ़ेस तर्क -> नियंत्रक; प्रमाणीकरण -> डोमेन + यूआई (वैकल्पिक) –
@the_drow: मैं कह रहा हूं कि व्यापार तर्क ** ** मॉडल में नहीं है, यह नियंत्रक में है। –
नियंत्रक के भीतर आप ModelState संपत्ति के लिए आप के लिए सत्यापन त्रुटियों जोड़ सकते हैं जो की है।
this example on the MSDN देखें।
आपके आवेदन मानते हुए की तरह संरचित है:
- मॉडल-व्यू-नियंत्रक
- सेवा
- हठ
- मॉडल
उपयोगकर्ता इनपुट, अपने नियंत्रक करने के लिए आते हैं और आप इसे सत्यापित करने के लिए सेवा परत में सेवाओं का उपयोग करेंगे।
अधिक परतें? सेवा परत क्या है?कोई डेटाबेस नहीं है इसलिए कोई दृढ़ता नहीं है, सभी डेटा किसी अन्य प्रक्रिया से लिया जाता है और सभी डेटा या तो यूआई या प्रक्रिया से बदला जाता है। –
मैं लंबे समय तक इस बारे में सोच रहा हूं और दोनों नियंत्रकों और मॉडलों में सत्यापन डालने की कोशिश करने के बाद .... अंततः मैं इस निष्कर्ष पर आया हूं कि मेरे कई अनुप्रयोगों के लिए ... सत्यापन मॉडल में है और नियंत्रक में नहीं। क्यूं कर? क्योंकि भविष्य में एक ही मॉडल विभिन्न अन्य नियंत्रक कॉल या एपीआई द्वारा उपयोग किया जा सकता है ... और फिर मुझे सत्यापन प्रक्रिया को बार-बार दोहराना होगा। वह डीआरवाई का उल्लंघन करेगा और कई त्रुटियों का कारण बन जाएगा। इसके अलावा दार्शनिक रूप से यह मॉडल जो डेटाबेस (या अन्य लगातार भंडारण) के साथ इंटरैक्ट करता है और इस तरह वैसे भी ऐसा करने के लिए 'अल्कोहल के लिए अंतिम कॉल' जगह है।
तो मैं नियंत्रक में अपना मिलता/पोस्ट अनुवाद करता हूं और फिर सत्यापन और प्रसंस्करण के लिए मॉडल को कच्चा डेटा भेजता हूं। बेशक मैं अक्सर php/mysql वेब अनुप्रयोग कर रहा हूं और यदि आप अन्य चीजें कर रहे हैं तो परिणाम भिन्न हो सकते हैं। मुझे उम्मीद है इससे किसी को सहायता मिलेगी।
मान्यता केवल मॉडल जानता कारोबार का "विवरण" मॉडल
में होना चाहिए। केवल मॉडल जानता है कि कौन सा डेटा स्वीकार्य है और कौन सा डेटा नहीं है। नियंत्रक बस जानता है कि मॉडल का "उपयोग" कैसे करें।
उदाहरण के लिए: मान लें कि हमें अपने सिस्टम में नए उपयोगकर्ताओं को पंजीकृत करने की कार्यक्षमता की आवश्यकता है।
मॉडल:
public function registerUser(User $user){
//pseudo code
//primitive validation
if(!isInt($user->age)){
//log the invalid input error
return "age";
}
if(!isString($user->name)){
//log the invalid input error
return "name";
}
//business logic validation
//our buisnees only accept grown peoples
if($user->age < 18){
//log the error
return "age";
}
//our buisness accepts only users with good physique
if($user->weight > 100){
//log the error
return "weight";
}
//ervery thing is ok ? then insert the user
//data base query (insert into user (,,,) valeues (?,?,?,?))
return true;
}
अब नियंत्रक/s काम कैसे मॉडल सत्यापन करने जा रहा है, या यहाँ तक कि क्या माना जाता है "वैध के ज्ञान के बिना मॉडल registerUser()
समारोह" का उपयोग "करने के लिए है " या नहीं!
नियंत्रक:
$user = new User();
$user->age = isset($_POST['age']) ? $_POST['age'] : null;
$user->name = isset($_POST['name']) ? $_POST['name'] : null;
$user->age = isset($_POST['weight']) ? $_POST['weight'] : null;
$result = $theModel->registerUser($user);// <- the controller uses the model
if($result === true){
//build the view(page/template) with success message and die
}
$msg = "";
//use the return value from the function or you can check the error logs
switch ($result){
case"age" :
$msg = "Sorry, you must be over 18";
break;
case "name":
$msg = "name field is not correct";
break;
case "weight":
$msg = "Sorry, you must have a good physique";
break;
}
//build the view(page/template) with error messages and die
वर्ग उपयोगकर्ता
class User {
public $age;
public $name;
public $weight;
}
होने की तरह है कि "मुक्त" पूरी तरह से व्यापार तर्क का ब्यौरा -which एक अच्छा बात है से नियंत्रकों होगा एक वास्तुकला ।
मान लीजिए कि हमें (और हम एक और नियंत्रक इसके लिए आवंटित होगा) उपयोगकर्ता पंजीकरण कहीं और वेबसाइट में का एक और रूप बनाना चाहते हैं। अब अन्य नियंत्रक मॉडल registerUser()
के उसी विधि का उपयोग करेगा।
लेकिन अगर हम नियंत्रक और मॉडल के बीच सत्यापन तर्क वितरित करते हैं तो उन्हें अलग नहीं किया जाएगा - जो बुरा है और एमवीसी के खिलाफ - जिसका अर्थ है कि हर बार आपको नए उपयोगकर्ता को पंजीकृत करने के लिए नया दृश्य और नियंत्रक बनाने की आवश्यकता होती है, आपको इसका उपयोग करना होगा एक ही पुराने नियंत्रक और मॉडल एक साथ। इसके अलावा यदि व्यापार तर्क बदल गया है (अब हम अपने स्पोर्ट्स क्लब में किशोर स्वीकार करते हैं) आप मॉडल registerUser()
फ़ंक्शन में कोड को बदलने के लिए जा रहे हैं। नियंत्रक कोड अभी भी वही है।
- 1. प्रपत्र प्रसंस्करण तर्क एक एमवीसी वेब अनुप्रयोग में कहां से संबंधित है?
- 2. "व्यापार तर्क परत" एक एमवीसी अनुप्रयोग में फिट कहां है?
- 3. एएसपी.नेट एमवीसी इनपुट सत्यापन
- 4. एमवीसी परियोजना में सत्यापन कहां होना चाहिए?
- 5. @ ट्रांसेक्शन एनोटेशन कहां से संबंधित है?
- 6. एमवीसी पैटर्न में सत्यापन परत
- 7. एमवीसी कंट्रीब सत्यापन सत्यापन
- 8. एएसपी.नेट एमवीसी: कहां जाता है?
- 9. एक स्प्रिंग एमवीसी वेब अनुप्रयोग
- 10. मुख्य एमवीसी अनुप्रयोग की उपनिर्देशिका में एएसपी.नेट एमवीसी अनुप्रयोग रखो?
- 11. एक Asp.Net एमवीसी अनुप्रयोग से DataContractJsonSerializer नहीं मिल रहा है
- 12. रेल में किसी संबंधित मॉडल से सत्यापन त्रुटियां कैसे दिखाएं?
- 13. एमवीसी अनुप्रयोग
- 14. एएसपी.नेट एमवीसी अविभाज्य ग्राहक सत्यापन
- 15. स्प्रिंग एमवीसी सत्यापन त्रुटि कोड कहां हल किए गए हैं?
- 16. एमवीसी अनुप्रयोग
- 17. एक एमवीसी परियोजना में एक साधारण कक्षा कहां रखा जाए?
- 18. डोमेन संचालित डिजाइन - डेटा पार्सिंग कहां से संबंधित है
- 19. रिपोजिटरी, सेवा या डोमेन ऑब्जेक्ट - तर्क कहां से संबंधित है?
- 20. शुरुआती सहायता - यह कोड कहां से संबंधित है?
- 21. एक्लिप्स स्टोर जानकारी कहां से संबंधित है "व्युत्पन्न"?
- 22. क्विक चेक उदाहरण कैबेल पैकेज में कहां से संबंधित हैं?
- 23. डीडीडी में सभी "थोक" संचालन कहां से संबंधित हैं?
- 24. एमवीसी मॉडल सत्यापन?
- 25. AppDelegate फ़ाइल एमवीसी में फिट कहां है?
- 26. एएसपी.NET एमवीसी वेब अनुप्रयोग
- 27. MomentJS - इनपुट सत्यापन के लिए इरादा है?
- 28. एएसपीनेट एमवीसी सशर्त सत्यापन
- 29. एमवीसी 4 में @ एचटीएमएल.मेलॉटो कहां है?
- 30. डीडीडी। उपयोगकर्ता कॉन्फ़िगर करने योग्य सेटिंग्स कहां से संबंधित हैं?
सरल जवाब: [। रख दिया जहां यह आवश्यक है] (http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/02/15/validation-in-a-ddd-world.aspx) –