MVC.NET 3.00 版的 MVC PLUS






4.60/5 (4投票s)
WebLights 组件库
注意:这个框架是一个与 J2EE 中 SPRING 的标准 MVC 和 MVC.NET 3.00 具有 100% 兼容性的框架,它在它们之上运行,并添加了许多以前在这个领域不存在的功能。
引言
我一直不喜欢 Webforms,因为它的代码质量低,而且缺乏 Web 特性。此外,我喜欢 C#,但由于这个平台缺乏 MVC 架构,我转向了 JAVA,我们正在讨论的它的库也有一个 JAVA (SPRING 的 MVC) 组件库,但我想介绍 C# 和 MVC.NET 版本作为我最喜欢的产品。
此设计的目标是
- Web 中的应用程序式环境
- 制作一个真正的以数据库为中心的系统,减少表单手动编码的工作量
- 轻量且高质量的页面
- 切勿使用
IFrame
或Popup
窗口,因为它们的行为不佳(我通过 JavaScript 沙盒实现了这一点,这意味着:您加载的所有表单都将加载到同一个 DOM 区域,并且它们将显示在一个DIV
中,而不是IFRAME
中) - 以及许多其他目标:最重要的是一种新的标准开发方式,特别是喜欢使用元模型(META MODELS)而非模型(Models),因为元模型具有更强的概念。
这个系统是
- 100% 纯 Ajax
- 完全无需刷新(我再次重申,无需刷新,但您可以重定向,不过也完全无需刷新页面)
- 页面加载速度提高多达 5 倍
- 这是第一次
- 组件模型中实现了 JavaScript 沙盒支持(完全不需要 Iframe!)
- 100% 以数据库为中心的系统
完成工作后进行比较。
我们出于相同的原因编写了相同的代码,并在三个不同的平台上进行了测试。您可以在这里看到结果

如您所见,MVC PLUS 在开发上所需时间仅为 MVC.NET 的三分之一,WebForms 的不到一半,这意味着更低的成本、更高质量的代码,以及在代码质量和整体上更便宜、更好的产品。
在这里,我们比较了这些框架的渲染大小,这也意味着服务器端渲染时间更短,如果您使用 SSL(应用服务器成本更低,数据传输速度更快),这将非常有效。

如您所见,使用 MVC Plus 渲染的平均表单大小介于 5 到 10 KB 之间,这远小于其他竞争对手,甚至小于 MVC.NET 中使用 Telerik 组件的它们的一半。
注意:所有测试都在我朋友的办公室通过,稍后我将发布示例代码(这些是真实的商业产品,所以我的朋友可能会删减一些代码)。
请注意,所有测试都是针对视图、原因和场景中相似的表单设计进行的。
标准 MVC 3.00
在标准 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 中
在 MVC Plus 中,您必须将模型与元模型分开声明,元模型将用于控制器和视图
首先,编写您的模型(作为存储库或 DAL)
public class Person:WLBaseModel {
[PrimaryKey]
public int PersonID;
[stringLength (max:50)]
[REQUIRED]
public string name {get ; set ; }
[REQUIRED]
[stringLength (max:50)]
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)
而且你还有
插入后 (Afterinsert)
更新后 (AfterUpdate)
选择后 (AfterSelect)
AfterDelete
AfterChange
其他命令后 (AfterOtherCommands)
主/从
在 MVC Plus 中,您可以将模型作为主从关系在元模型中可用,但不用担心,无需编写太多代码——您只需用几行代码即可完成。您可以如下将两个模型连接为主从关系
Address.Master = Person;
或
[AutoConnectModels(“*”)]
public class MetaModel {
… {Models …
}
无需额外代码。
自动操作所需的數據將通過模型屬性上的屬性提供
[PrimaryKey]
public int addrssID {get ; set ;}
[ForeignKey(Person)]
public int PersonID {get ; set ;}
验证
验证将显示在控件旁边,客户端将在发送到应用服务器之前显示一条消息。
验证与标准 MVC 非常相似,但您可以拥有
行验证 (RowValidation)
字段验证 (FieldValidation)
大多数情况下不需要进行 RowValidation
,但您也可以将其添加到客户端和服务器端。
默认情况下,大多数验证将自动完成。
一个示例代码如下
[Required]
[RangeOf(OnlyAlphabet)]
[MaxMinLength(5,50)]
public string Name {get ; set ;}
甚至
[Required]
[Password(StrongPassord)]
[MaxMinLength(5,32)]
[EqualTo(“confirmPassword”]
Public string Password {get ; set ; }
此外,系统将自动在客户端和服务器端验证模型成员的类型。
验证将显示在控件旁边,客户端将在发送到应用服务器之前显示一条消息。您可以轻松地为它们设置特殊的形状,但默认情况下,我们有四种不同的显示方式
- 发布前作为模态(DIV 模态,而非弹出窗口!)
- 在您输入时,作为工具提示显示在左上角
- 自定义方式
- 在编辑控件的左侧或右侧空间
Components
每个单独的控件都应有一个 FieldName
,类似于应用服务器中 Model
的 Property
名称,这些将由 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 多个即用型组件。
在图片中,您可以看到一些页面是用这个系统设计的。请注意,这些标签页不是 IFRAMES
,它们来自不同的来源,并且使用了 JAVASCRIPT 沙盒模型,您始终可以从服务器端运行任何 JS 命令而无需刷新。
MVC PLUS 2.00 现在支持以前不存在的 TREE 模型
- 树模型有两种方式,手动或自动,它们都使用递归模型。无需任何特殊代码
- 只需在模型中启用树属性
Model.IsTree=True;
-
然后在视图中
@Html.WLTreeFor(m=>m.Person)
Ryan Samiee
BCs 和 16 年专业经验(从 14 岁开始作为专业开发人员与公司合作),以及 14 年 Delphi 和随后的 WEB 组件开发经验。