پیاده سازی MVC Design Pattern درNET.

سه شنبه 2 شهریور 1395

این مقاله مفاهیم اولیه Model View Controller (MVC) design pattern را توضیح می دهد و همچنین نحوه به کارگیری این Design Pattern در فریم ورک NET. را بررسی می کند.

پیاده سازی MVC Design Pattern درNET.

مقدمه

دیزاین پترن ها اگر در جای مناسب به کار گرفته شوند، می توانند در حل مشکلات پیچیده طراحی بسیار مفید باشند. در این مقاله  به معرفی و همچنین توضیح نحوه پیاده سازی این دیزاین پترن ها می پردازیم.

پیش نیاز ها 

مفاهیم برنامه نویسی شی گرا ، .NET Framework ، ADO.NET, C#, XSD

تعریف : Model View Controller (MVC)

View اطلاعات را از Model می گیرد و آن ها را به عنوان پاسخ برای مدلی که در کنترلر توسط کاربر فراخوانی شده است، می فرستد.

Model View Controller یک روش طراحی است که application object model را از GUI جدا می کند، که اولین بار حدود دهه 80 اختراع شد و بعد ها به عنوان یک دیزاین پترن بسیار متداول ، مورد استقبال گسترده کاربران قرار گرفت. موضوع اصلی در این الگو، جداسازی بخش  نمایش اطلاعات (presentation layer) از روند پردازش داده های حقیقی است، که با این روش ، یک مدل مشابه می تواند برای چندین view مورد استفاده قرار بگیرد. این ویژگی با استفاده از سه نوع شی امکان پذیر شده است که با هم در یک سری از وظایف به صورت نسبتاً تعاملی، به کار گرفته می شوند.

این سه شی عبارتند از : Model, View  و Controller.

View

View ظاهر گرافیکی اطلاعات است که مجزا از پردازش داده ها است . View در حقیقت احساس و نگاه کاربر را نسبت به برنامه کنترل می کند. View کاملا از بخش پردازشی اطلاعات و روند پردازش داده ها جدا است . View به سادگی داده های کاملا پردازش شده را از مدل می گیرد و آن ها را کمی زیباتر و بهتر می کند و سپس در مرورگر به کاربر نمایش می دهد. در حقیقت View رابط کاربری برنامه برای تعامل با کاربر را فراهم می کند. زیبایی روش MVC در این نکته است که قابلیت پشتیبانی از انواع view   ها را دارد.

یک مدل MVC می تواند چندین view داشته باشد که همگی توسط کنترلر ، کنترل می شوند. View  ها می توانند به صورت WEB-FORMS, HTML, XML/XSLT, XTML,  و  WML و یا Windows form باشند.

Model

Model مسئول پردازش داده ها است . پردازش داده ها شامل ارتباط با پایگاه  داده، اجرای Qurey ها بر روی پایگاه داده ، پیاده سازی قوانین مورد نظر بر روی داده ها و غیره است. Model داده ها را به صورت کامل پردازش می کند و سپس به صورت آماده به view تحویل می دهد. داده هایی که توسط Model پردازش و آماده می شوند، وابسته به view خاصی نیستند و به همین دلیل می توانند در انواع قالب های view بدون نیاز به هیچ گونه کدنویسی اضافی، مورد استفاده قرار بگیرند. این ویژگی باعث راحت تر شدن کدنویسی ، کاهش باگ های برنامه و همچنین استفاده مجدد از کدها می شود. Model به درخواست هایی که توسط کنترلر ایجاد می شوند پاسخ می دهد و در صورت لزوم ، به view ها اطلاع می دهد تا محتویات خودشان را با داده های جدید به روزرسانی کنند.

Controller

Controller مسئول پاسخ گویی و توجه به action ها است . Controller به ورودی های ماوس  و یا کیبورد پاسخ می دهد  و به مدل و view   اطلاع می دهد تا در صورت لزوم تغییر کنند. Controller ها به view ها وابسته هستند. رابط کاربری برای تغییرات نیاز به مدل دارد، که مدل نیز متدها را فراخوانی می کند تا از بروز به روز رسانی ها مطلع بشود و در صورت نیاز، view ها را تغییر بدهد.

مزایا

مزایای این دیزاین پترن عبارتند از :

همان طور که می دانیم  MVC می تواند یک model را با چندین view  به کار بگیرد، این ویژگی باعث آسان تر شدن نگهداری ، تست و به روز رسانی های پروژه می شود.

برای اضافه کردن یک بخش جدید (مثلا Client) کافی است به آسانی کنترلر ها و view های آن را اضافه کنیم .

به دلیل مجزا بودن Model از view  ، قابلیت انعطاف پذیری  و پیاده سازی کدهای ما تا میزان بالایی افزایش پیدا می کنند.

می توانیم از پردازش های موازی برای model, view  و  controller استفاده کنیم.

این ویژگی ها در نهایت، مقیاس پذیری و توسعه پروژه را افزایش می دهند.

نقاط ضعف

در برخی موارد پیاده سازی ، نیاز به مهارت های بالا و تجربه داریم تا بتوانیم نیاز های مورد نظرمان را از طریق این دیزاین پترن برطرف کنیم.

نیاز به زمان قابل توجهی برای تجزیه و تحلیل و همچنین طراحی دارد.

این روش طراحی ، برای برنامه های کوچک مناسب نیست.

.NET  و  MVC

بیایید به بررسی این نکته بپردازیم که چگونه ASP.NET نیازهای مفاهیم و قاعده های mvc را برطرف می کند.

    Model: Dataset/Business Entities, DataAccess components

    View:   ajax صفحات

Controller: Code-behind .vb/.cs files

Dataset ها ویژگی فوق العاده ای در .NET هستند که اطلاعات برنامه را در حافظه خودشان نگه میدارند و سپس لایه business entity mode برنامه را تشکیل می دهند که پلی میان کامپوننت های  UI و لایه داده به شمار می رود.

بنابراین ، service interface  و کامپوننت های  Data Access با استفاده از این dataset ها پر می شوند. این dataset ها می توانند به انواع view  ها در لایه UI متصل شوند.

ASP.NET توابع خاص مرکزی ای برای کنترلرها ندارد و به جای فایل های code-behind می توانند به صورت مستقیم به مدل، درخواست ارائه بدهند و dataset  ها را به روز رسانی کنند.  

.NET Framework همه ویژگی های شی گرایی از جمله code reuse و  encapsulation etcSo را دارد. اگر به درستی مدل خودتان را طراحی کنید، در نهایت می توانید رابط کاربری و view  را به صورت کاملا مجزا و مستقل اداره کنید.

نمونه کد:

نمونه ای که در زیر ارائه داده شده است، الگوی MVC را همراه با .NET Framework  و  C# نشان می دهد. این برنامه، دستور ها را از پایگاه داده می گیرد و در dataset می ریزد. این مثال، دو نوع مختلف view برای نمایش دارد که هر دو از یک مدل با استفاده از Web.UI control ها گرفته شده اند.

بررسی کد:

Typed DataSet (Business Entity):

تصویر زیر ، شمای کلی XML order را نشان می دهد.

: ASPX

وب فرم MVCDesign.aspx ، دو view مختلف را برای یک dataset نمایش می دهد:

    protected MVCDesignCSharp.XMLData.Orders ordersDataSet;  
    privatevoid Button1_Click(object sender, System.EventArgs e)   
    {  
        BizOrderManager.GetOrderList(ordersDataSet);  
        if (DataGrid1.Visible == false)   
        {  
            DataList1.Visible = false;  
            DataGrid1.Visible = true;  
            DataGrid1.DataBind();  
            Button1.Text = "Show View 1";  
        }   
        else   
        {  
            DataList1.Visible = true;  
            DataGrid1.Visible = false;  
            DataList1.DataBind();  
            Button1.Text = "Show View 2";  
        }  
    }  
    privatevoid Button2_Click(object sender, System.EventArgs e)   
    {  
        BizOrderManager.GetOrderList(ordersDataSet);  
        DataList1.Visible = true;  
        DataGrid1.Visible = true;  
        DataList1.DataBind();  
        DataGrid1.DataBind();  
        Button1.Text = "Show Only View 2";  
    }   

Business Objects:

تکه کد زیر ، یک متد است که می تواند توسط کنترلر درخواست شود. همچنین این متد می تواند با کامپوننت های دیگر دسترسی به داده نیز تعامل داشته باشد.

publicstaticvoid GetOrderList(DataSet OrderDS)  
    {  
       OrderDS.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "/XMLData/Orders.xml");  
    }  

آموزش asp.net mvc

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید