MVP

 

MVP是一種普遍使用的UI架構模式,適用於基於事件驅動的應用框架。架構

可以與 Model直接進行交互的僅限於 Presenter, View 只能經過 Presenter 間拉地調用 Model。框架

MVP分PV(Passive View) 和 (Supervising Controller)兩種模式this

SC(Supervising Controller)spa

public partial class WebForm1 : System.Web.UI.Page,IEmployeeSearchView { public EmployeeSearchPresenter Presenter { get; private set; } public event EventHandler<DepartmentSelectedEventArgs> DepartmentSelected; public WebForm1() { this.Presenter = new EmployeeSearchPresenter(this); } protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { this.Presenter.Initialize(); } } protected void ButtonSearch_Click(object sender, EventArgs e) { string department = this.DropDownListDepartments.SelectedValue; DepartmentSelectedEventArgs eventArgs = new DepartmentSelectedEventArgs(department); if (null != DepartmentSelected) { DepartmentSelected(this, eventArgs); } } public void BindEmployees(IEnumerable<Employee> employees) { this.GridViewEmployees.DataSource = employees; this.GridViewEmployees.DataBind(); } public void BindDepartments(IEnumerable<string> departments) { this.DropDownListDepartments.DataSource = departments; this.DropDownListDepartments.DataBind(); } } public class EmployeeSearchPresenter { public IEmployeeSearchView View { get; private set; } public EmployeeRepository Repository { get; private set; } public EmployeeSearchPresenter(IEmployeeSearchView view) { this.View = view; this.Repository = new EmployeeRepository(); this.View.DepartmentSelected += OnDepartmentSelected; } private void OnDepartmentSelected(object sender, DepartmentSelectedEventArgs e) { string department = e.Department; var employees = this.Repository.GetEmployees(department); this.View.BindEmployees(employees); } public void Initialize() { IEnumerable<Employee> employees = this.Repository.GetEmployees(); this.View.BindEmployees(employees); string[] departments = new string[] { "銷售部", "採購部", "人事部", "IT部" }; this.View.BindDepartments(departments); } } public class DepartmentSelectedEventArgs : EventArgs { public string Department { get; private set; } public DepartmentSelectedEventArgs(string department) { this.Department = department; } } public interface IEmployeeSearchView { void BindEmployees(IEnumerable<Employee> employees); void BindDepartments(IEnumerable<string> departments); event EventHandler<DepartmentSelectedEventArgs> DepartmentSelected; } public class EmployeeRepository { private static IList<Employee> employees; static EmployeeRepository() { employees = new List<Employee>(); employees.Add(new Employee("001", "張三", "", new DateTime(1981, 8, 24), "銷售部")); employees.Add(new Employee("002", "李四", "", new DateTime(1982, 7, 24), "人事部")); employees.Add(new Employee("003", "王五", "", new DateTime(1981, 9, 21), "銷售部")); employees.Add(new Employee("004", "張三1", "", new DateTime(1981, 8, 24), "銷售部")); employees.Add(new Employee("005", "張三2", "", new DateTime(1981, 8, 24), "銷售部")); employees.Add(new Employee("006", "張三3", "", new DateTime(1981, 8, 24), "銷售部")); } public IEnumerable<Employee> GetEmployees(string department = "") { if (string.IsNullOrEmpty(department)) { return employees; } return employees.Where(e => e.Department == department).ToArray(); } } public class Employee { public string Id { get; private set; } public string Name { get; private set; } public string Gender { get;private set; } public DateTime BirthDate { get; private set; } public string Department { get; private set; } public Employee(string id,string name,string gender,DateTime birthDate,string department) { this.Id = id; this.Name = name; this.Gender = gender; this.BirthDate = birthDate; this.Department = department; } }

界面部分aspxcode

<form id="form1" runat="server"> <div> <div class="top"> 選擇查詢部門: <asp:DropDownList ID="DropDownListDepartments" runat="server"></asp:DropDownList> <asp:Button ID="ButtonSearch" runat="server" Text="查詢" OnClick="ButtonSearch_Click" /> </div> <asp:GridView ID="GridViewEmployees" runat="server" AutoGenerateColumns="false" Width="100%"> <Columns> <asp:BoundField DataField="Name" HeaderText="姓名" /> <asp:BoundField DataField="Gender" HeaderText="性別" /> <asp:BoundField DataField="BirthDate" HeaderText="出生日期" DataFormatString="{0:dd/MM/yyyy}" /> <asp:BoundField DataField="Department" HeaderText="部門" /> </Columns> </asp:GridView> </div> </form>

主要就是aspx實現接口,Presenter接收View,執行相關方法,將Model與界面分離orm

相關文章
相關標籤/搜索