在软件开发领域,尤其是企业级应用的开发过程中,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。项目的最终目标/范围是允许开发者拥有绝对的控制和灵活性,并提供以下选项:
如果有人愿意贡献并帮助开发,请告诉。