2012-03-17 22 views
5

के बीच अंतर मैं एएसपी.नेट में एमवीसी और 3-स्तरीय वास्तुकला के बीच अलग-अलग खोजने की कोशिश कर रहा हूं। मैंने कुछ पिछले कुछ प्रश्नों और कुछ पृष्ठों को संदर्भित किया है, लेकिन एक स्पष्ट उत्तर मिल सकता है। http://msdn.microsoft.com/en-us/library/ff647462.aspxएमवीसी नियंत्रक और व्यापार तर्क (3 स्तर)

पर विचार करें, मैं इस कोड ahve:
एकल पृष्ठ aspx यूआई और कोड के रूप में अच्छी तरह से

<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<html> 
    <head> 
     <title>start</title> 
     <script language="c#" runat="server"> 
     void Page_Load(object sender, System.EventArgs e) 
     { 
      String selectCmd = "select * from Recording"; 

      SqlConnection myConnection = 
       new SqlConnection(
        "server=(local);database=recordings;Trusted_Connection=yes"); 
      SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, 
       myConnection); 

      DataSet ds = new DataSet(); 
      myCommand.Fill(ds, "Recording"); 

      recordingSelect.DataSource = ds; 
      recordingSelect.DataTextField = "title"; 
      recordingSelect.DataValueField = "id"; 
      recordingSelect.DataBind(); 
     } 
     </script> 
    </head> 
    <body> 
     <asp:dropdownlist id="recordingSelect" runat="server" /> 
     <asp:button runat="server" text="Submit" OnClick="SubmitBtn_Click" /> 
     </form> 
    </body> 
</html> 

अब, पर विचार मैं के लिए अलग अलग फ़ाइलों
यहाँ आ MSDN MVC कार्यान्वयन के बारे में पेज है
---- देखें और कोड-पीछे spearated ----
.aspx

<%@ Page language="c#" Codebehind="Solution.aspx.cs" 
    AutoEventWireup="false" Inherits="Solution" %> 
<html> 
     <asp:dropdownlist id="recordingSelect" runat="server" /> 
     </form> 
    </body> 
</html> 

.aspx.cs

using System; 
using System.Data; 
using System.Data.SqlClient; 
public class Solution : System.Web.UI.Page 
{ 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
     String selectCmd = "select * from Recording"; 
     SqlConnection myConnection = 
      new SqlConnection(
       "server=(local);database=recordings;Trusted_Connection=yes"); 
     SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection); 
     DataSet ds = new DataSet(); 
     myCommand.Fill(ds, "Recording"); 
     recordingSelect.DataSource = ds; 
     recordingSelect.DataTextField = "title"; 
     recordingSelect.DataValueField = "id"; 
     recordingSelect.DataBind(); 
     } 
    } 
  1. Controller वर्ग के लिए ऊपर msdn page link देखकर, मैं व्यापार तर्क के बीच का अंतर (उस के लिए समान हो गया होता विचार करने के लिए सक्षम नहीं हूँ एक 3 स्तरीय वास्तुकला में एक मध्यम स्तर) और नियंत्रक।
  2. 3-स्तरीय और एमवीसी पूरी तरह से अलग बात है? क्या विजुअल स्टूडियो में एएसपी.NET एप्लिकेशन पहले ही एमवीसी फॉर्म में फाइल को अलग कर चुका है? यदि ये अलग नहीं हैं, तो कौन सी पसंदीदा शैली है?
  3. तब के बारे में एमवीसी ढांचा क्या है यदि .aspx और .aspx.cs पहले से ही भाले गए हैं?

उत्तर

5

मैं वास्तव में यह एक साथ strugled जबकि myslef, वहाँ उसे सही ढंग से लागू करने के लिए अलग-अलग दर्शन कर रहे हैं, तो यह कैसे मैं इसे अपने ही शब्दों में समझते हैं कि कैसे मैं विभिन्न शामिल चीजों (मॉडल/दृश्य/नियंत्रकों/व्यापार तर्क) के बीच संबंध को समझने:

  • दृश्य
    सभी HTML/jQuery कोड है, वे 0 के रूप में डेटा का उपयोगउदाहरणों कि नियंत्रक से
  • मॉडल
    वर्गों है कि सूचना
  • नियंत्रकों (उत्पादों आदि की सूची) अपने दृश्य प्रस्तुत करना करने की जरूरत है पकड़ में आ
    • वे आने वाले अनुरोधों
    • आवश्यक तैयारी सुनिश्चित ले (पैरामीटर निष्कर्षण इत्यादि) अपने वास्तविक व्यापार तर्क कोड को कॉल करने के लिए।
    • तो व्यापार तर्क कोड में कॉल और परिणाम
    • बाद में वे परिणाम लेने के लिए और एक मॉडल है कि यूआई समझता
  • व्यापार तर्क
    में बदल देती है पुनः प्राप्त यह अपने वास्तविक व्यापार तर्क कोड है , डीबी आदि को बुलाओ। मैं अपनी आंखें पूरी एमवीसी चीज से पूरी तरह से अलग हूं, वास्तव में यह भी नहीं जानना चाहिए कि इसे एक एमवीसी वेब एप्लिकेशन से निष्पादित किया गया है। आम तौर पर हम यह सुनिश्चित करने के लिए एक अलग असेंबली (कक्षा पुस्तकालय) में डालते हैं कि एमवीसी कोड पर कोई निर्भरता नहीं है।
    यह यूनिट परीक्षण के लिए केवल व्यापार तर्क के लिए बहुत आसान बनाता है, क्योंकि एमवीसी के लिए कोई निर्भरता नहीं है।

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

अपने प्रश्न पर वापस आना, यह सब एएसपी.नेट 3-स्तरीय आर्किटेक्चर से कैसे संबंधित है।
कोई कह सकता है कि मूल रूप से संपूर्ण एमवीसी वेब एप्लिकेशन प्रेजेंटेशन लेयर (+ बिजनेस परत के साथ प्रेजेंटेशन लेयर को वायरिंग) से अधिक कुछ नहीं है।

अन्य परतें प्रस्तुति परत से अलग और स्वतंत्र रहती हैं, जैसा कि पहले होना चाहिए।

+0

के विचार पसंद नहीं हैं। यह पूरी तरह से सच है। मैं यह भी कहूंगा कि दृश्यों में प्रेजेंटेशन तर्क होता है जबकि नियंत्रकों में प्रस्तुति स्तर में अनुप्रयोग तर्क होता है। इसके अलावा, मॉडल आम तौर पर व्यापार परत का हिस्सा है। –

+0

@ बालाज़्स तिहानी वास्तव में हम विचारों द्वारा उपयोग किए जाने वाले मॉडलों के बारे में व्यवसाय स्तर को जागरूक नहीं करते हैं, व्यापार परत 'मॉडल' के एक अलग सेट का उपयोग कर रही है और परिणाम नियंत्रकों के भीतर मॉडल में मैप किए जाते हैं (automapper i ' मैं आपको देख रहा हूँ) – ntziolis

0

सॉफ्टवेयर वास्तुकला में "परत" और "स्तरों" के बीच एक अच्छा तुलना/डिजाइन के लिए here देखें

MVC पैटर्न है सब के बारे में चिंताओं की जुदाई, और तथ्य यह है कि अपनी प्रस्तुति परत (देखें) और व्यापार तर्क अलग किया जाना चाहिए। पीछे कोड का उपयोग करना पानी को गंदे बनाना आसान बनाता है। आप पाएंगे कि नया एएसपी.नेट व्यू इंजन (रेजर) में फाइलों के पीछे कोड भी नहीं है।

मुख्य अंतर, जब आप अपने नियंत्रक में तर्क का परीक्षण करना चाहते हैं तो अधिक मायने रखता है, यह है कि नियंत्रक केवल एक सादा पुरानी कक्षा है, लेकिन आपका कोडबींड सिस्टम.Web.UI.Page से प्राप्त होता है और इस प्रकार एएसपीनेट के अंदरूनी हिस्सों से दृढ़ता से बंधे हैं।

इसके अलावा, http://ardalis.com/Codebehind-Files-in-ASP.NET-MVC-are-Evil और पढ़ https://msmvps.com/blogs/luisabreu/archive/2008/09/19/codebehind-files-in-asp-net-mvc-are-not-evil.aspx

+0

मैंने इसे पहले पढ़ा था। मुझे लगता है कि केवल अंतर यह है कि एम एंड वी कंट्रोलर के साथ सीधे (एमवीसी में) बातचीत कर सकता है, जो दूसरी तरफ 3-स्तरीय वास्तुकला में संचार को व्यावसायिक तर्क के माध्यम से किया जाना चाहिए। एक अच्छा समझने योग्य अंतर के साथ, दो अलग-अलग दृष्टिकोण की तरह दिखता है। क्या एमवीसी या 3 स्तर के बीच चयन करने का कोई फायदा है? – user1240679

+0

मैं कहूंगा कि 3 स्तर और एमवीसी बहुत अलग अवधारणाएं हैं (जैसा कि एमवीसी पैटर्न अब उपयोग किया जाता है), 3 स्तर आपके डेटा तर्क को तर्कसंगत रूप से (और अक्सर शारीरिक रूप से) आपके व्यावसायिक तर्क से अलग करने के लिए अधिक संदर्भित करता है, इसलिए आजकल एमवीसी बन जाता है आपके आवेदन के पहले दो स्तर, लेकिन आपके पास अभी भी – Rich

+0

के पीछे डेटा एक्सेस "टियर" बैठा है यह प्रश्न एमवीसी बनाम 3-स्तरीय को भी संबोधित करता है http://stackoverflow.com/questions/1025430/i-need-ome-clarification -ऑन-द-एमवीसी-आर्किटेक्चर-एंड-द-थ्री-स्तरीय आर्किटेक्चर – Rich

2

एमवीसी और 3-स्तरीय पूरी तरह अलग चीजें हैं।
मुझे लगता है कि बहुत से लोग दोनों को भ्रमित करते हैं क्योंकि दोनों को 3 भाग मिलते हैं।
देखें:

MVC एक यूआई पैटर्न है केवल (एक वेब परियोजना के मामले में) एचटीएमएल और जे एस शामिल
नियंत्रक: यूआई (के बीच एक मध्यस्थ की तरह है = दृश्य) और बैक-एंड (= मॉडल)
मॉडल: यह वह जगह है जहां आपके डोमेन वस्तुओं व्यापार और डेटा का उपयोग तर्क के रूप में, रहते हैं और साथ ही

3-स्तरीय चिंताओं आप की पूरेआवेदन:
यूआई: HTML/JS के साथ-साथ पृष्ठों की पीछे कोड में शामिल है।
यूआई कोड के अलावा और व्यापार परत को कॉल करने के अलावा बिल्कुल कोई तर्क नहीं है।
बिजनेस लेयर: यह वह जगह है जहां आप गणना, परिस्थितियों, सत्यापन, जैसे चीजें डालते हैं ..
तो आपके आवेदन का वास्तविक व्यवहार। कोई डेटा एक्सेस कोड यहां है।
डेटा का उपयोग: यहां आप डेटाबेस से बात करते हैं और डेटा को व्यापार परत पर वापस कर देते हैं।
कुछ और नहीं, व्यापार परत को पता होना चाहिए कि इसके साथ क्या किया जाए।

तो अगर आप दो गठबंधन, आप प्राप्त करेंगे:
यूआई: विचारों और नियंत्रकों
व्यापार परत: मॉडल
डोमेन वस्तु का हिस्सा: मॉडल
डाटा एक्सेस के भाग आप ' आप एक अलग परत में ऑब्जेक्ट्स (उत्पाद, ऑर्डर, ..) के साथ काम कर रहे हैं।
यह मॉडल का भी एक हिस्सा है।

अगर आपको प्रश्न मिलते हैं तो गोली मारो!

संबंधित मुद्दे