معماری MVP به زبان ساده:
Model View Presenter یکی از الگوهای معماری است که هدفش جداسازی UI از انجام کارهایی است که به آن ارتباطی ندارد .به عنوان مثال بسیاری از برنامه نویسان هندلر رویداد ها را در خود کلاسهای UI کد نویسی می کنند و با این کار در واقع منطق (الگوریتم) برنامه را در کلاسهای UI پیاده سازی می کنند که این کار به دلائل زیادی اشتباه است.
دلائلی مانند:
1- بالا بردن Coupling برنامه
2- پایین آمدن قابلیت استفاده مجدد (reusability ) کلاسهای نوشته شده برای سایر پروژه ها
3- عدم امکان Unit Testing
4- ...
در ادامه این مقاله ، سعی می کنم که اجزای این معماری رو برایتان توضیح بدم:
View :
این دسته از کلاسها که از نوع Form و یا Page می توانند باشند. در واقع همان UI هستند که کارشان گرفتن اطلاعات از کاربر و نمایش اطلاعات به کاربر می باشد.
هندلر رویداد ها در کلاسهای View وجود دارد ولی منطق برنامه در این هندلر ها نوشته نمی شود بلکه متد متناظر از کلاس presenter صدا زده می شود.
Model :
کاراین لایه ارتباط با داده و انجام عملیاتهای مختلف برای آماده کردن اطلاعات می باشد. الزاما منظور از داده حتما ارتباط با پایگاه های داده همچون MSSQL و Access و ... نیست ، حتی منبع داده ها در بخش Model میتواند یک آرایه از اعداد و یا هر چیز دیگری باشد .
Presenter :
View عملیات خواسته شده توسط کاربر را به کلاس Presenter متناظرش رد می کند و وظیفه این کلاس این است که با برقراری ارتباط با کلاسهای مناسب لایه Model ، نتیجه لازم را فراهم کند و آنرا به لایه View ارسال نماید.

Step 1: Create an interface for a business object (Model). For example:
public interface ICircleModel
{
double getArea(double radius);
}
Step 2: Create a class for Model
public class CModel: ICircleModel
{
public CModel(){}
public double getArea(double radius)
{
return Math.PI * radius * radius;
}
}
Step 3: Create an interface for View
public interface IView
{
string RadiusText { get; set;}
string ResultText { get; set;}
}
Step 4: Create UI like below with a Label, TextBox and Button. Textbox for getting radius of the circle, Label is for displaying the area and Button is for calculating the Area
Step 5: Create a Presenter class for collecting user inputs from View and pass view details to the Model.
public class CPresenter
{
IView mview;
public CPresenter(IView view)
{
mview = view;
}
public double CalculateCircleArea()
{
CModel model = new CModel();
mview.ResultText = model.getArea(double.Parse(mview.RadiusText)).ToString();
return mview.ResultText.ToString();
}
}
Step 6: Code-behind of ASPX page - View is communicating to the Model via Presenter
public partial class _Default : System.Web.UI.Page,IView
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ButtonResult_Click(object sender, EventArgs e)
{
CPresenter presenter = new CPresenter(this);
presenter.CalculateCircleArea();
}
public string RadiusText
{
get{return TextRadius.Text;}
set{TextRadius.Text = value;}
}
public string ResultText
{
get { return LabelResult.Text; }
set { LabelResult.Text = value; }
}
}
آخرین بروز رسانی مطلب در پنجشنبه ، 24 شهریور 1390 ، 01:32


نظرات
متشکرم
مدتها بود که دنبال این چنین مطالبی بودم