使用 ASP.NET MVP 的 Entity Framework 实现






4.07/5 (9投票s)
使用 ASP.NET MVP 的 Entity Framework 实现
背景
ASP.NET MVP 模式在 90 年代末期发展起来。它是 MVC 模式的后代,在设计模式上略有变化,即它实现了 MVC 的观察者设计方法。其余组件保持不变,这意味着模型和视图像在 MVC 中一样完成他们的任务。
MVP (模型-视图-呈现器)
ASP.NET MVP 由三个部分组成。它们是
- 模型
- 视图
- 表示器
模型
模型是域类型或业务级别对象。它包含应用程序数据,并提供逻辑和行为来访问数据。模型需要独立,不应存在任何关于用户界面 (UI) 的问题。由于模型应该独立,因此同一个模型可以被不同类型的 UI 级别应用程序使用。
视图
视图是一个占位符,它保存模型数据并将其显示给应用程序用户。简单来说,视图是一个用于呈现模型数据的 Web 窗体。模型与视图没有直接联系,而视图应该了解它们的模型。
表示器
呈现器处理用户输入,并使用它来操作模型数据。视图将用户输入操作传递给呈现器进行解释。呈现器将对从视图接收的数据采取行动,并与模型通信,然后将结果返回给视图。
下图描述了 MVP 模式的基本流程。
MVP 与 Web 窗体 Vs. MVC
Web 窗体具有高生产力,但对标记、URL 和代码的控制较少。MVC(模型-视图-控制器)对标记、URL 和代码具有高控制,但生产力较低。MVP 在生产力和控制之间实现了平衡。
MVC 和 MVP 之间的选择
在 MVC 中,模型存储数据,视图是数据的表示,控制器允许用户更改数据。当数据发生更改时,所有视图都会收到更改通知,并根据需要进行自身更新。MVP 是 MVC 的衍生产品。
MVP 减少了对视图的控制,并将大部分责任放在呈现器中。它试图使所有逻辑成为呈现器的一部分,因此视图是“被动的”。MVC 和 MVP 的基本思想是相同的,模型存储数据,视图是数据的表示,呈现器协调数据。
Entity Framework 简介
在现实世界编程中,数据库开发人员更喜欢使用关系模型来表示数据,而应用程序开发人员更喜欢使用面向对象模型。ADO.NET Entity Framework 解决了这两种模型之间的差异。ADO.NET Entity Framework 是 ADO.NET 的后代,它提供了概念实体(.NET 类)和数据存储之间的对象关系映射。Entity Framework 使用实体数据模型,该模型由存储架构、概念架构、映射架构和实体类组成。
流程图
- 首先,在 VWD(Visual Web Developer)中创建一个新的 ASP.NET 空 Web 应用程序。在我的例子中,我使用了 VS 2010。
- 之后,在文件 *IView.cs* 中为视图名称 `IView` 添加一个新的接口。代码如下
using System; using System.Collections.Generic; using System.Linq; using System.Web; using TestMVPApp.Model; namespace TestMVPApp.View { public interface IView { string FirstName { get; set; } string MiddleName { get; set; } string LastName { get; set; } string Address { get; set; } string ContactNo { get; set; } string Message { get; set; } } }
- 添加一个呈现器类,并将其命名为 *Presenter.cs*,其中包含以下代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using TestMVPApp.Model; using TestMVPApp.View; using System.Web; using System.Configuration; namespace TestMVPApp.Presenter { public class TestPresenter { IView detailsView; public TestPresenter(IView view) { detailsView = view; } public string SaveDetails() { TestModel test = new TestModel(); if (test.SaveDetails(detailsView.FirstName, detailsView.MiddleName, detailsView.LastName, detailsView.Address, detailsView.ContactNo)) { detailsView.Message = "Success"; } else { detailsView.Message = "Failure"; } detailsView.FirstName = string.Empty; detailsView.MiddleName = string.Empty; detailsView.LastName = string.Empty; detailsView.Address = string.Empty; detailsView.ContactNo = string.Empty; return detailsView.Message.ToString(); } } }
- 添加呈现器类后,添加一个视图页面,并将其命名为 *InputViewPage.aspx*。在此 UI 页面中,创建一个表和字段,用于输入名字、中间名、姓氏、地址和联系电话。
在代码隐藏中,编写代码以实现接口 `IView`。代码如下
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using TestMVPApp.Presenter; namespace TestMVPApp.View { public partial class InputViewPage : System.Web.UI.Page, IView { protected void Page_Load(object sender, EventArgs e) { } protected void btnShowData_Click(object sender, EventArgs e) { TestPresenter detailsPresenter = new TestPresenter(this); if (detailsPresenter.SaveDetails() != null) { Response.Redirect("DisplayViewPage.aspx"); } } public string FirstName { get { return txtFname.Text; } set { txtFname.Text = value; } } public string MiddleName { get { return txtMName.Text; } set { txtMName.Text = value; } } public string LastName { get { return txtLName.Text; } set { txtLName.Text = value; } } public string Address { get { return txtAddress.Text; } set { txtAddress.Text = value; } } public string ContactNo { get { return txtContact.Text; } set { txtContact.Text = value; } } public string Message { get { return ltrlMessage.Text; } set { ltrlMessage.Text = value; } } } }
- 现在是编写模型类的时候了。在此之前,添加一个新的 Entity 数据模型并命名它,并相应地创建一个数据库连接。在模型类中,编写以下代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace TestMVPApp.Model { public interface IModel { List<tbl_userdetails> ReturnDetails(); } public class TestModel : IModel { private Entities textContext = new Entities(); private Tbl_UserDetails testDetails; private IEnumerable<tbl_userdetails> detailsList; public TestModel() { } public bool SaveDetails(string firstName, string middleName, string lastName, string address, string contactNo) { testDetails = new Tbl_UserDetails() { FirstName = firstName, MiddleName = middleName, LastName = lastName, Address = address, ContactNo = contactNo }; textContext.AddToTbl_UserDetails(testDetails); int testValue = textContext.SaveChanges(); if (testValue > 0) { return true; } else { return false; } } public List<tbl_userdetails> ReturnDetails() { //detailsList = from v in //textContext.GetDetails() select v; return detailsList.ToList<tbl_userdetails>(); } } }
- 现在可以运行应用程序了,将出现以下屏幕图. 主页(视图)
- 填写详细信息并提交数据。如果数据成功保存在数据库中,则会出现以下屏幕图. 成功屏幕
结论
本文介绍了使用 Entity Framework 的 ASP.NET MVP,并以逐步的方式指导您。祝您编码愉快。