Code First方法在ASP.NET应用中的实践

在软件开发领域,尤其是企业级应用的开发过程中,CRUD(创建、读取、更新、删除)操作和基本用户界面(UI)的设计往往是最令人烦恼且重复性高的部分。理想的情况是,开发者只需编写类定义,然后通过简单的命令如“保存”、“加载”或“渲染”,即可自动完成这些操作。EntityUI框架正是基于这样的理念设计的。

微软一直在尝试解决这个问题,他们提供了一些半自动化的工具,如GridView和FormView用于渲染UI,以及SQLDataSource用于快速编写CRUD。这些工具在快速搭建页面且不需要维护时表现良好,但在需要良好设计的分层框架的真实应用中,它们的表现就不尽如人意了。随后,微软推出了动态控件,最新的尝试是LightSwitch。有一个不同的UI渲染想法,认为它更简单,因为它从开发者编写的类开始,并且将非常灵活。

最初,想法是设计一个“保存”和“加载”的机制,但随后微软发布了Entity Framework4.1,引入了Code First方法,这在某种程度上解决了CRUD的问题。令人难以置信的是,想法与他们的设计非常相似。既然他们已经实现了这一点,想开始着手UI部分,为开发者提供类似的工具。EntityUI框架将使用类的属性来创建用户界面。

使用代码

以下是实现这一想法的初步源代码示例。基本上,它展示了如何编写类,然后通过几行代码,就可以渲染UI!

Public Class Department Public Sub New() Me.Courses = New HashSet(Of Course)() End Sub ' 主键 Public Property DepartmentID As Integer Public Property Name As String Public Property Budget As Decimal Public Property StartDate As System.DateTime Public Property Administrator As System.Nullable(Of Integer) ' 导航属性 Public Overridable Property Courses As ICollection(Of Course) End Class

上面展示的模型类与微软在他们的Code FirstFluent API示例中使用的模型类相同。它非常直接,并且包含几个自解释的属性。

接下来,将编写代码来为上述模型渲染UI。以下是实现UI渲染的代码:

' 实例化School类并附加事件 Protected WithEvents Departments As New EntityUI(Of Department) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' 使用EntityUI框架自动渲染输入控件的示例 PlaceHolderUI.Controls.Add(Departments.RenderInputPanel()) End Sub

在上述代码中,首先使用EntityUI框架创建了一个页面级别的属性"Departments",类型为Department。在页面加载时,使用EntityUI框架的"RenderInputPanel()"方法,该方法基本上返回一个ASP.NET面板控件,包含模型类每个属性的标签和输入字段,这些控件是基于属性类型的。

该框架还提供了几个事件。以下代码展示了如何处理"InputSaved"事件。

Sub SaveClicked() Handles Departments.InputSaved ScriptManager.RegisterStartupScript(Me.Page, Page.GetType(), "saveclicked", "alert('You pressed Save');", True) End Sub

布局由标准的CSS样式控制。EntityUI.css文件应该包含在目标Web应用程序中,以便应用这些样式。

请记住,这不是一个成品或最终代码。这非常不完整,可能是0.2版本。

目标是基本上自动为这个类生成UI,类似于Entity Framework生成SQLCRUD的方式。目前,EntityUI框架基本上只适用于基本数据类型,如String、Int和Date。项目的最终目标/范围是允许开发者拥有绝对的控制和灵活性,并提供以下选项:

  • 添加更多的输入类型(如货币、时间等)并提供验证
  • 覆盖默认渲染方法的能力
  • 使用配置类控制哪些属性/验证器/按钮显示的能力
  • 覆盖默认CSS样式元素的能力
  • 使DropDownList和AutoComplete工作的能力
  • 为List渲染Grid的能力

如果有人愿意贡献并帮助开发,请告诉。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485