MVC Plus: The Next Generation of Web Development

在当今的软件开发领域,MVC(Model-View-Controller)架构因其清晰的分层和高效的数据处理能力而广受欢迎。然而,随着技术的发展和用户需求的增加,传统的MVC框架已经不能完全满足现代web开发的需求。为了解决这一问题,MVC Plus应运而生,它不仅完全兼容标准的Spring MVC for J2EE和MVC.NET 3.00,还在此基础上增加了许多前所未有的功能。

一向不喜欢WebForms,因为它生成的代码质量低下,并且缺乏web的本质特性。尽管喜欢C#,但因为MVC架构在该平台上的泄露,转向了JAVA。讨论的这个库也有一个JAVA(Spring MVC)组件库,但更喜欢C#和MVC.NET版本,它是最喜欢的产品。

MVC Plus的设计目标包括:

  • 在web中创建类似应用程序的环境
  • 构建一个真正的数据库中心系统,减少表单的手动编码工作
  • 轻量级和高质量的页面
  • 永远不要使用From、IFrame或Popup Windows,因为它们的行为(通过JavaScript沙箱实现了这一点:所有加载的表单都将加载在同一个DOM区域,并在一个DIV中显示,而不是IFRAME)

MVC Plus系统的特点:

  • 100%全Ajax,无需刷新(再次强调,无需刷新,但可以重定向,也无需刷新页面)
  • 页面加载速度提高5倍
  • 首次实现JavaScript沙箱支持,集成在组件模型中(完全不需要Iframes!)
  • 100%数据库中心系统

在完成工作后进行比较,为同样的原因编写了同样的代码,并在三个不同的平台上进行了测试。在这里,可以看到结果:

  • 正如看到的,MVC Plus需要的MVC.NET开发时间只有三分之一,不到WebForms的一半,这意味着成本更低,代码质量更高,确切地说,是一个更便宜、更好的产品。
  • 在这里,比较了这些框架在渲染大小方面的表现,这也意味着服务器端的渲染时间更短,如果使用SSL,则更有效(应用服务器的成本更低,数据传输速度更快):

平均使用MVC Plus渲染的表单大小在5到10KB之间,这比其他竞争对手要小得多,甚至不到MVC.NET(使用Telerik组件)的一半大小。

在标准MVC中,需要按照以下方式编写模型: public class Person { public string name { get; set; } public string FamilyName { get; set; } } public class ADDRESS { public string name { get; set; } public string FamilyName { get; set; } } 每个视图最多只能支持一个模型,例如,只能访问Person模型或address模型。

在MVC Plus中,需要将模型与元模型分开声明,元模型将在控制器和视图中使用: public class Person : WLBaseModel { [PrimaryKey] public int PersonID; [StringLength(max: 50)] [REQUIRED] public string name { get; set; } [StringLength(max: 50)] [REQUIRED] public string FamilyName { get; set; } } public class ADDRESS : WLBaseModel { [PrimaryKey] public int addrssID { get; set; } [ForeignKey(Person)] public int PersonID { get; set; } [REQUIRED] [StringLength(max: 50)] public string City { get; set; } [REQUIRED] [StringLength(max: 65535)] public string Address { get; set; } } 然后需要声明元模型: public class MetaModel : WLBaseMetaModel { [ApplicationServerCache { timeOut: 10 }] public Person Person { get; set; } [ApplicationServerCache { timeOut: 10 }] public Address Address { get; set; } } 在标准MVC 3.00中,无法访问两个模型。在MVC Plus和元模型中,可以在一个元模型中拥有多个模型。

只支持MVC.NET 3.00中的RAZOR,所以目前不支持其他视图引擎,也不认为以后会支持它们。 可以在视图中使用声明的元模型: @Html.WLControlFor(m => m.Person.Name) @Html.WLControlFor(m => m.Person.FamilyName) @Html.WLControlFor(m => m.Address.City) @Html.WLControlFor(m => m.Address.Addrsss) 所有模型成员将相互连接,网格、树、编辑器、复选框、组合框等。

重复一遍,必须将模型和元模型的概念分开。 在这里,可以看到上面几行中意思: 正如看到的,树和编辑器相互连接。 但它是如何工作的呢?简而言之,架构是这样的,这是一个复杂的架构,但做到了,以确保开发方式的安全: // 架构代码示例 稍后,将介绍在重型JavaScript和C#库中实现这样的代码有多困难(主要是在架构上很难做到)。 请注意,这是一个巨大而伟大的web架构,也许是第一次???(不知道!只是也许),做了许多新的事情来提供这些能力。

批量数据传输: 在标准MVC中,数据传输可以发送单个记录,需要为多个记录编写许多自定义代码。 在大多数情况下,开发中很难传输多个记录。 在MVC中,可以一次性发送/接收多个记录,可以称之为批量传输,这对大多数开发情况都很有用。

作为架构的额外优势,MVC Plus在客户端和服务器端都有双向(服务器/客户端)缓存,这将保证:

  • 将只接收一次记录或数据。
  • 将只接收需要在客户端显示的所需记录。
可以将模型行为设置为实时。 由于数据在客户端更改,并且在客户端更改光标位置或修改客户端数据,客户端将向服务器发送更新、插入或删除的项目。 Address.LiveData = true; 可以将模型行为设置为离线。 可以一次性向服务器发送批量记录,例如10个修改过的记录。 Person.LiveData = false; 要处理批量或单个记录,可以使用触发器,例如: Beforeinsert BeforeUpdate BeforeSelect BeforeDelete BeforeChange BeforeOtherCommands And also you have: Afterinsert AfterUpdate AfterSelect AfterDelete AfterChange AfterOtherCommands

主/详细信息: 在MVC Plus中,可以使模型在元模型中作为主详细信息可用,但不用担心,不需要编写大量代码,只需要用几行代码就可以做到,可以将两个模型连接为主详细信息: Address.Master = Person; Or : [AutoConnectModels("*")] public class MetaModel { … {Models …} No Need For Extra Code. 自动操作所需的数据将通过模型属性上的属性提供: [PrimaryKey] public int addrssID { get; set; } [ForeignKey(Person)] public int PersonID { get; set; }

验证: 验证将显示在控件旁边,客户端将在将它们发送到应用程序服务器之前显示一条消息。 验证与标准MVC非常相似,但可以拥有: RowValidation FieldValidation 大多数情况下不需要进行行验证,但也可以将其添加到客户端和服务器。 默认情况下,大多数验证将自动完成。 一个示例代码将是: [Required] [RangeOf(OnlyAlphabet)] [MaxMinLength(5, 50)] public string Name { get; set; } Or even: [Required] [Password(StrongPassord)] [MaxMinLength(5, 32)] [EqualTo("confirmPassword")] Public string Password { get; set; } 系统还将自动在客户端和服务器上验证模型成员的类型。 验证将显示在控件旁边,客户端将在将它们发送到应用程序服务器之前显示一条消息。可以轻松地为它们设置特殊形状,但默认情况下,有四种不同的显示方式:1 – 提交前作为模态框(DIV模态框而不是弹出窗口!)2-在左上角作为工具提示,当输入它们时 3-自定义方式 4-在编辑控件的左侧或右侧空间。

组件: 每个单独的控件都应该有一个FieldName,这与应用程序服务器中模型的属性名称相似,这些将由C#或J2EE组件自动生成。 只需在视图中简单地放置控件: @Html.WLControlFor(m => m.Address.Addrsss) 为此框架准备了许多组件: Html.WLTextEditFor Html.WLWebEditorFor Html.WLDivEditFor Html.WLDisplayfor Html.WLTreefor Html.WLCheckBoxFor Html.WLComboBoxFor Html.WLSpinEditFor Html.WLAutoCompleteFor Html.WLLookUpFor Html.WLGridFor 以及109多个其他现成的组件。 在下面的图片中,可以看到一些使用此系统设计的页面,请注意这些标签不是IFRAME,但它们来自不同的来源,并且它们使用JAVASCRIPT沙箱模型,总是可以在不刷新的情况下从服务器端运行任何JS命令。

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