ASP.NET MVC क्या कर सकता है और रूबी रेल्स पर नहीं कर सकता है? [बन्द है]


37

ASP.NET MVC और रेल के समान उपयोग के क्षेत्र हैं, एक ही वास्तुकला के आसपास निर्मित हैं, दोनों रूपरेखा अपेक्षाकृत नए और खुले स्रोत हैं।

इसलिए एक रेल प्रोग्रामर के रूप में, मैं जानना चाहता हूं कि ASP.NET MVC क्या कर सकता है और रूबी ऑन रेल्स, और वीजा वर्सा नहीं दे सकता है?


बड़ा सवाल है। मैं एक एमवीसी डेवलपर हूं और इसका जवाब जानने के लिए उत्सुक हूं।
स्टॉपरयूजर

14
इस प्रकार के प्रश्न खुले हैं और वेब IMHO को ट्रोल करके बेहतर उत्तर दिए गए हैं। बीएमडब्लू 335 क्या कर सकता है कि हुंडई सोनाटा नहीं कर सकता है? उन दोनों में 4 प्रयास हैं, एक स्टीयरिंग व्हील और एक ही खपत ढांचे पर बनाया गया है; ईंधन। दिए गए विषयों पर समझ की कमी के कारण ये प्रश्न सतह पर आते हैं, जो एक अधिक प्रत्यक्ष प्रश्न की सुविधा प्रदान कर सकते हैं .... मुझे यकीन है कि बहुत से असहमत होंगे क्योंकि यह प्रोग्रामर है ...
एरोन मैकिवर

1
@ ऐरॉन - भले ही मैं इस प्रश्न का उत्तर जोड़ने की परेशानी से गुज़रा, लेकिन मैं सिद्धांत रूप में आपके साथ सहमत हूं, और मुझे आशा है कि मैंने यह स्पष्ट कर दिया है कि आपके एनालॉग को उधार लेने के लिए, हम एक कार की दूसरे से तुलना कर रहे हैं।
एडम क्रॉसलैंड

10
मैंने व्यक्तिगत रूप से सोचा था कि यह एक वैध प्रश्न था। इस तरह के प्रश्नों को इतनी तत्परता से शूट नहीं किया जाना चाहिए क्योंकि हम में से बहुत से लोग केवल कहानी के एक पक्ष को जानते हैं और यह दूसरे पक्ष के बारे में भी विचार करने में मदद करता है। BTW, StackExchange पर एक प्रश्न पूछना मेरी पुस्तक में शोध के रूप में योग्य है।
उमर फारुख ख्वाजा

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

जवाबों:


31

मैंने रेल और ASP.NET MVC दोनों के साथ वास्तविक अनुप्रयोग विकसित किए हैं, लेकिन यह उत्तर एक महत्वपूर्ण चेतावनी के साथ आता है: मैंने पूर्व-संस्करण 2 रेल के साथ सीखा और विकसित किया है, इसलिए यह पूरी तरह से संभव है कि मैं अपने साथ बहुत ही आउट-ऑफ-डेट हूं ज्ञान का पालन करता है।

यह कहा जा रहा है, मुझे नहीं लगता कि ऐसा कुछ भी है जो एक के साथ किया जा सकता है लेकिन दूसरे के साथ नहीं। किसी वेब एप्लिकेशन के लिए आवश्यकताओं के किसी भी सेट को देखते हुए, आपको उस ऐप को बनाने में सक्षम होना चाहिए - शायद समान रूप से कुशलता से - या तो रेल या ASP.NET MVC के साथ।

कुछ साफ-सुथरी बातें हैं - जो कि मेरी जानकारी में सबसे अच्छी हैं - मुख्यतः C # /। NET के पहलुओं के कारण ASP.NET MVC में उपलब्ध हैं। उदाहरण के लिए: जब मेरे पास एक पेज होता है जिसमें एक फॉर्म होता है जो सबमिट किया जाता है, तो मेरे पास एक एक्शन होगा जो यह देखने के लिए जांच करेगा कि क्या यह GET या POST के साथ काम कर रहा है, यह तय करने के लिए कि क्या करना है:

def edit
  @item = Item.find(params[:id])

  if request.post? 
    @item.update_attributes(params[:item])
    redirect_to :action => 'edit', :id => @item.id 
  end
end

यह इसका एक तुच्छ उदाहरण है, लेकिन if request.post?पैटर्न रेल में एक बहुत ही आम है। गैर-तुच्छ मामलों के लिए, एक्शन कोड बड़ा और गड़बड़ हो सकता है, और अक्सर, मैं चाहूंगा कि मैं इसे अलग-अलग तरीकों से साफ-सुथरे तरीके से रिफैक्ट कर सकूं। ASP.NET MVC में मैं ऐसा कर सकता हूं:

public ActionResult Edit() {
  // Render my page that has the Edit form
  ...
}

[HttpPost]
public ActionResult Edit(Foothing foo) {
  // Save my Foothing data
  ...
}

मुझे लगता है कि GET और POST अनुरोधों को संभालने के लिए सफाई से अलग होना संभव है। आपकी माइलेज भिन्न हो सकती है।

दूसरी बात जो ASP.NET MVC करता है वह सुपर कूल (फिर से मेरी राय में) फॉर्म POSTS को संभालने से भी संबंधित है। रेल में, मुझे paramsअपने सभी फ़ॉर्म चर के लिए हैश को क्वेरी करना होगा। मान लीजिए कि मेरे पास 'स्थिति', 'gonkulated', 'invert' और 'disposition' फ़ील्ड के साथ एक फ़ॉर्म है:

def edit
  @item = Item.find(params[:id])

  if params[:status] == "new"
    ...
  else
    ...
  end

  if params[:gonkulated] == "true"
    ...
  else
    ...
  end

  if params[:invert] == "true"
    ...
  else
    ...
  end

  # Rest ommited for brevity
end

लेकिन ASP.NET MVC बड़े करीने से मुझे मेरे सभी फॉर्म वैल्यूज़ को मेरी एक्शन विधि के मापदंडों के रूप में प्राप्त करने की अनुमति देता है:

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

वे दो चीजें हैं जो मुझे ASP.NET MVC या रेल के बारे में बहुत पसंद हैं। वे किसी भी समझदार या सक्षम डेवलपर के लिए एक कारण नहीं हैं कि वह दूसरे के ऊपर एक ढांचा चुन सकें।


6
एक्शन पैरामीटर्स के बारे में: मैंने सोचा होगा कि public ActionResult Edit(Foothing foothing), यानी मॉडलबाइंडर फीचर्स और भी नॉटी थे।
rmac

10
रेल उदाहरण बहुत पुराने हैं। वे काम करते हैं, लेकिन ऐसा करने के लिए बेहतर तरीके हैं।
जेसन ने

2
@ जेसन: क्या आप इस पर विस्तार करना चाहेंगे और शायद एक जिस्ट पोस्ट करें ?
दान

3
मैं सहमत हूँ कि request.post? मेरे लिए भी असामान्य लगता है (शायद इसलिए कि पुराने संस्करणों में इसका इस्तेमाल किया गया था)। मैंने रेल 3 के साथ शुरुआत की और संपादन विधि हमेशा एक 'गेट' है। मुझे लगता है कि आप इसे पोस्ट करने के लिए कॉन्फ़िगर कर सकते हैं, लेकिन रेल एक प्रतिष्ठित पैटर्न का उपयोग करती है जो किसी मॉडल में होने वाले परिवर्तनों के लिए पोस्ट को करने के लिए एक 'अपडेट' पद्धति का उपयोग करेगा। इसलिए, अगर सही ढंग से किया गया है तो आपको यह भी जांचना चाहिए कि क्या 'एडिट' पद्धति एक पोस्ट थी।
फिलिपक्रेग

3
आपको केवल इसलिए वोट देना कि आप एक समझदार तर्क प्रस्तुत करते हैं। मुझे रेल पसंद है, लेकिन यह पूरी तरह से व्यक्तिपरक है और आप अपने मामले को अच्छी तरह से बहस करते हैं।
स्टीव हिल

6

रेल पर ASP.NET MVC का एक लाभ यह है कि यदि आपको किसी मौजूदा डेटाबेस पर एक नया एप्लिकेशन बनाने की आवश्यकता है। रेल की ActiveRecord के बारे में बहुत राय है कि तालिकाओं को कैसे संरचित किया जाना चाहिए (तालिका में एक और केवल एक पूर्णांक स्तंभ को प्राथमिक आईडी के रूप में कहा जाता है, आदि) इसलिए यदि आपकी मौजूदा तालिका ActiveRecord प्राथमिकताओं के अनुरूप नहीं है, तो ActiveRecord बनाना कठिन है काम। लेकिन ActiveRecord और रेल के साथ नए DB के साथ नया ऐप विकसित करना तेज है!

ASP.NET MVC में डिफ़ॉल्ट ORM नहीं है। आप एक डेटा एक्सेस रणनीति चुन सकते हैं जो आपकी आवश्यकता के अनुकूल हो। कुछ ORM जैसे nhibernate विरासत डेटाबेस का समर्थन कर सकते हैं। आपके पास प्राथमिक कुंजी आदि का मार्गदर्शन हो सकता है।

Rails ActiveRecord नाम का एक विकल्प DataMapper है , लेकिन मैंने इसे आज़माया नहीं है।


9
यदि आप कुछ सम्मेलनों का पालन करते हैं, तो रूबी के ActiveRecord आपको बहुत सारे कोड को खत्म करने की अनुमति देता है, लेकिन इसकी आवश्यकता नहीं है। यदि सम्मेलनों का पालन नहीं किया जाता है, तो आपको अधिक स्पष्ट होना होगा।
केविन क्लाइन

1
ASP.NET MVC में ORM के लिए एंटिटी फ्रेमवर्क है, जो इसके साथ मेरे अनुभव में अब तक बहुत बढ़िया रहा है।
कूपर

अगर भयानक रूप से आपका मतलब है बुरी तरह से उत्पन्न प्रश्नों को निष्पादित करने से 20 गुना धीमा ठीक से लिखा एसक्यूएल तो;) ... Dapper Contrib कुछ ऐसा है जो मैंने बहुत अच्छा और तेज पाया है ...
नीको

2

दोनों का उपयोग करने के बाद, IMO का उत्तर है कि ASP.NET MVC रेल की तुलना में अधिक लचीला है, यदि आपके एप्लिकेशन को डेटाबेस से केवल पढ़ने / लिखने से अधिक करने की आवश्यकता है । मेरे अनुभव में रेल बहुत ही तुच्छ CRUD लॉजिक से परे किसी भी तरह की जटिलता या तर्क को लागू करने वाले मिनटों में जल्दी और भारी रूप से टूट जाती है। ASP.NET MVC इस प्रतिबंध का सामना नहीं करता है क्योंकि यह अधिक "खुला" है कि आप क्या कर सकते हैं।

बाकी सभी एक ठेठ "वेब 2.0" सीआरयूडी ऐप में बराबर हैं, कोई भी ऐसा नहीं कर सकता है जो दूसरे पर कर सकता है, लेकिन अधिक जटिल एप्लिकेशन के लिए जिसे वर्कफ़्लो की आवश्यकता है, या डेटा स्रोतों को अलग करना, या किसी अन्य एप्लिकेशन, या किसी भी चीज़ के साथ बातचीत करना वह विशिष्ट CRUD नहीं है , ASP.NET बहुत अधिक कर सकता है और रेल के रूप में प्रतिबंधक नहीं हो सकता है।


9
-1 मुझे ऐसा कोई कारण नहीं दिख रहा है कि ASP.NET MVC को अधिक लचीला क्यों माना जाएगा - यदि आप प्रमुख घटकों, रूटिंग, कंट्रोलर्स, रेंडरिंग को देखते हैं, तो वे सभी बस रेल से दूर हैं और बहुत सारी विशेषताओं को याद कर रहे हैं।
scottschulthess

1
Asp.net mvc 'अधिक खुला' कैसे है? मैं पूरे क्रूड मचान वाली चीज को छोड़ सकता हूं, और अपने मॉडल और कंट्रोलर को स्क्रैच प्लस से नेस्टेड एसोसिएशन बना सकता हूं - एक से कई, एक से कई, कई से कई - बिना किसी 'ब्रेक डाउन' के। और, अगर मैं एक जावास्क्रिप्ट भारी फ्रंट-एंड का उपयोग करने का निर्णय लेता हूं, तो मैं आसानी से अपने सभी मॉडल डेटा को JSON (या XML, या किसी अन्य प्रारूप) में क्लाइंट को आसानी से भेज सकता हूं। इसके अलावा, यदि आप एक ऐसी कार्यक्षमता के बारे में सोच सकते हैं जिसे आप लागू करना चाहते हैं, तो उसके लिए शायद पहले से ही एक रत्न है। गैर-तुच्छ रेल एप्लिकेशन खोजना मुश्किल नहीं है।
फिलिपप्रेग

2
कच्चे c # / .net ढांचे में नीचे जाने में सक्षम होने के कारण इसे अधिक लचीला माना जा सकता है?
क्रिस बैरी

2
इस पर बहुत देर हो गई, लेकिन इस पोस्ट के साथ मेरा क्या मतलब था। ASP.NET MVC आपको C # /। NET पर छोड़ देता है और पूरे ढांचे का लाभ उठाता है। समय पर रेल (लगभग 2.0 मुझे लगता है; मुझे याद नहीं है) मूल रूप से CRUD को बहुत आसान और बाकी सब कुछ कठिन बना दिया; जिस परियोजना पर मैं काम कर रहा था, जब मैंने लिखा था कि यह रेल (मेरी त्रुटि) में किया गया था और हमने "डेटाबेस से पढ़ा, पेज में प्रदर्शन" से परे तर्क कर रहे मिनट को तोड़ दिया था, क्या मैंने इसे सी # / ASP.NET MVC (में किया था) 1.0 इस बिंदु पर IIRC) मुझे कई मुद्दों का सामना नहीं करना पड़ा होगा जो मैंने इसके लिए ऐप के लिए रेल का चयन करके किया था।
वेन मोलिना

2

मैंने कभी भी रूबी के साथ रेल पर काम नहीं किया है, इसलिए मैं इस प्रश्न का उत्तर देने के लिए बिल्कुल योग्य नहीं हूं, लेकिन ASP.NET MVC के बारे में एक बात मुझे बेहद पसंद है। यह रास्ते में आता है। एडम क्रॉसलैंड और rmac ने अपनी टिप्पणियों में इसे संक्षेप में छुआ, लेकिन मैं यह बताना चाहूंगा कि निम्नलिखित की तरह एक नियंत्रक विधि के साथ, प्रत्येक पैरामीटर दृढ़ता से टाइप किया जाएगा। यह कोड को बहुत साफ करने वाले तरीके से संपादित करता है, जिससे आपको स्ट्रिंग अभ्यावेदन को ठीक से टाइप किए गए चर में बदलने की चिंता नहीं करनी पड़ती।

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

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

यदि Infinity.ViewModels.Siteनाम स्थान एक वर्ग युक्त है ContactViewModel, तो रेजर दृश्यों के लिए, आप इसे इस तरह से देखने के शीर्ष पर एक पंक्ति रखकर करते हैं:

@model Infinity.ViewModels.Site.ContactViewModel

और ASPX विचारों के लिए, आप इसे इस तरह से दृश्य घोषित करके करते हैं:

<%@ Page Language="C#" ="~/Views/Shared/Site.master" ="System.Web.Mvc.ViewPage<Infinity.ViewModels.Site.ContactViewModel>" %>

आप मॉडल ऑब्जेक्ट के वास्तविक उदाहरण को कंट्रोलर एक्शन विधि में दृश्य के साथ जोड़ते हैं और फिर दृश्य की Modelसंपत्ति द्वारा मॉडल ऑब्जेक्ट के उदाहरण तक पहुँच प्राप्त करते हैं।

यह मजबूत-टाइप-नेस, मेरे लिए, सुपर-कूल है। ASP.NET MVC बनाने वाली टीम ने 3 मॉडल, व्यू और कंट्रोलर क्षेत्रों में से प्रत्येक को दृढ़ता से टाइप करने के लिए बहुत प्रयास किया है।

मुझे यकीन नहीं है कि रूबी-ऑन-रेल्स के पास यह है, लेकिन मुझे उम्मीद है।


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

1

वे बहुत समान हैं, और वे सभी "समान कार्य" कर सकते हैं ज्यादातर, बस कुछ चीजें एक में आसान होती हैं और दूसरे की तुलना में कठिन होती हैं।

मैंने मूल रिलीज़ के आस-पास ASP.NET MVC का उपयोग किया था और यह निश्चित रूप से एक रेल क्लोन माइनस एक्टिवरकॉर्ड था। तो, रेल लगभग निश्चित रूप से एक बहुत बड़ी विशेषता और एक बहुत बड़ा प्लगइन / रत्न पारिस्थितिकी तंत्र है।


2
यह सच है - लेकिन रेल भी लगभग 8 वर्षों के लिए रही है इसलिए इसकी शुरुआत हुई है। मैं रेल से asp.net पर आ रहा हूं और MVC 3 वास्तव में बहुत अच्छा है। एंटिटी फ्रेमवर्क और नुगेट पैकेज मैनेजर मेरे लिए अब तक बहुत प्रभावशाली रहे हैं।
फिलिपप्रेग

1

मेरे सीमित अनुभव में ASP.NET MVC का मुख्य लाभ यह है कि यह एक संकलित भाषा है। यह आपको पहले से ही संकलन पर कुछ प्रोग्रामिंग बग का पता लगाने की अनुमति देता है, जहां रूबी को इकाई परीक्षण के दौरान पता लगाने पर भरोसा करना पड़ता है।

यह भी तथ्य यह है कि यह संकलित किया गया है कि उन्नत रिफैक्टरिंग उपकरण होना संभव है, उदाहरण के लिए, एक स्थान पर एक संपत्ति का नाम बदलना, और संपत्ति के सभी संदर्भ बदल जाते हैं। यह कम से कम TextMate में नहीं किया जा सकता है, जो कई रेल डेवलपर उपयोग करते हैं।

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

किसी भी समय किसी भी विधि को किसी भी विधि से बदलने की क्षमता ने मुझे इकाई परीक्षण लिखने में बहुत मदद की है। .NET में, निर्भरता इंजेक्शन और IOC कंटेनर वस्तुतः परीक्षण योग्य कोड बनाने के लिए आवश्यकताएं हैं। रूबी में यह आवश्यक नहीं है।

संपादित करें:

इसके बारे में सोचने के बाद, शायद रेल्स की हत्यारा सुविधा डेटाबेस माइग्रेशन है। ASP.NET MVC फ्रेमवर्क अपने आप में कोई डेटाबेस समर्थन प्रदान नहीं करता है। .NET फ्रेमवर्क में कुछ डेटा एक्सेस घटक / ORM होते हैं, जैसे Entity Framework और Linq से Sql। लेकिन इसमें डेटाबेस संरचना को डिजाइन करने के लिए कोई उपकरण नहीं है।

यदि आप वीएस के अधिक महंगे संस्करणों में से एक के लिए भुगतान करते हैं, तो आप डेटा ड्यूड प्राप्त कर सकते हैं , जो आपको डेटाबेस स्कीमा डिज़ाइन करने की सुविधा देता है, और स्कीमा को डेटाबेस में तैनात करने के लिए कुछ उपकरण हैं। लेकिन जहां तक ​​मैं बता सकता हूं, एप्लिकेशन के पुराने संस्करणों से माइग्रेशन को संभालने का समर्थन बहुत सीमित है।

कुछ का दावा है कि ASP.NET MVC वास्तव में एक MVC फ्रेमवर्क नहीं है, जो डेटाबेस प्रवासन के लिए समर्थन की कमी के कारण केवल एक VC फ्रेमवर्क है।

संपादित करें (फिर से):

विज़ुअल स्टूडियो टूलचैन / ईएफ में परिवर्तन ने मेरे पिछले संपादन के बाद से कोड आधारित माइग्रेशन पेश किए हैं। (लेकिन अगर आप उस रास्ते से नीचे जा रहे हैं तो फ्लुएंटिमिगेटर की भी जाँच करें)


2
इकाई फ्रेमवर्क 5.0 कोड पहले माइग्रेशन का समर्थन करता है
hofnarwillie

दरअसल, 4.1 के बाद से कोड फर्स्ट माइग्रेशन का समर्थन किया गया है, जो मेरे संपादन के बाद AFAIK बहुत लंबे समय तक जारी नहीं किया गया था।
पीट

-1

माइक्रोसॉफ्ट के एमवीसी 3 और एंटिटी फ्रेमवर्क के साथ मेरी प्रमुख समस्या उनके खराब बुरे डिजाइन सिद्धांत हैं।

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

मेरी बात को समझाने के लिए आपके पास दो मॉडल वर्ग हैं जैसे:

public class Color
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Thing
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual Color Color { get; set; }
}

कलर प्रॉपर्टी बनाना वास्तविक ORM के लिए पर्याप्त होगा लेकिन EF के लिए नहीं। आपको थिंग क्लास में कलर प्रॉपर्टी के लिए एक अनावश्यक आईडी जोड़ना होगा, जैसे:

public class Thing
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int ColorID { get; set; }
    public virtual Color Color { get; set; }
}

यदि आप किसी विदेशी ऑब्जेक्ट संदर्भ के लिए अनावश्यक आईडी फ़ील्ड नहीं जोड़ते हैं, तो आप आसानी से लिंक किए गए वर्ग के सभी संभावित विकल्पों के साथ ड्रॉपडाउन सूची नहीं बना सकते हैं।

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

यह सबसे अच्छा 101 सामान है, लेकिन जाहिर है कि Microsoft कंप्यूटर विज्ञान और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के बुनियादी सिद्धांतों से पूरी तरह अनजान है। [/ rant]


8
आपको अपनी इकाई रूपरेखा वस्तुओं पर एक विदेशी कुंजी संपत्ति की आवश्यकता नहीं है। इसके अलावा, EF एक पूरी तरह से अलग उत्पाद है और किसी भी तरह ASP.NET MVC के साथ एकीकृत नहीं है। आपको अपने उपयोगकर्ता इंटरफ़ेस का निर्माण करने और किसी भी ड्रॉप डाउन सूची या अन्य नियंत्रणों का निर्माण करने के लिए दृश्य मॉडल का उपयोग करना चाहिए।
लूसिफ़ेर सैम

मैं सहमत हूँ। आपके पास अपने इकाई ढांचे में कोई भी आईडी कुंजी नहीं होनी चाहिए। एक ORM को ऑब्जेक्ट पहचान को संभालना चाहिए। लेकिन बिंदु लिया; मैं वास्तव में भयानक ईएफ ओआरएम के बारे में अधिक शिकायत कर रहा हूं। यह उदाहरण एक सरल संस्करण है जो कि सीधे Microsoft से आता है। यह ठीक है कि वे इसे अपने समकालीनता उदाहरण में कैसे करते हैं। यह मेरी बात करता है। Microsoft MVC या ORM को नहीं जानता है और उनके उदाहरण इसे दिखाते हैं।
माइक बेथानी

1
ColorID गुण जोड़ने से आप आलसी लोडिंग पैटर्न को लागू कर सकते हैं जो कई बार बहुत उपयोगी होता है। उदाहरण के लिए, यदि संदर्भित ऑब्जेक्ट बहुत बड़ी है और आपको वास्तव में ऑब्जेक्ट के सभी संपत्ति मूल्यों की आवश्यकता नहीं है, तो यह सब उस के संबंधित आईडी भाग (ColorID) को खोजने के लिए इसे प्राप्त करने के लिए प्रसंस्करण समय की बर्बादी होगी। । यह आपको Nullable / Non-Nullable विदेशी कुंजियों को लागू करने की भी अनुमति देता है, अर्थात यदि रंग की हमेशा आवश्यकता नहीं है तो क्या होगा? ColorID को Nullable Integer में बदलेंint?
hofnarwillie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.