在当今的软件开发领域,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的设计目标包括:
MVC Plus系统的特点:
在完成工作后进行比较,为同样的原因编写了同样的代码,并在三个不同的平台上进行了测试。在这里,可以看到结果:
平均使用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命令。