65.9K
CodeProject 正在变化。 阅读更多。
Home

MVC PLUS for MVC.NET 3.00

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2012年8月8日

CC (ASA 3U)

7分钟阅读

viewsIcon

22185

WebLights 组件库

注意:此框架是一个与 J2EE 中 SPRING 的标准 MVC 和 MVC.NET 3.00 100% 兼容的框架,它在此之上运行并增加了以前在此领域中不存在的许多功能。

我一直不喜欢 Webforms,因为它代码质量低且具有非 Web 性质。此外,我喜欢 C#,但由于此平台中 MVC 架构的泄露,我转投了 JAVA,我们正在讨论的这个库也有一个 JAVA (MVC FOR SPRING) 组件库,但我更想介绍 C# 和 MVC.NET 版本作为我最喜欢的产品。

此设计的目标是

  1. Web 中的应用程序式环境
  2. 制作真正的 DB 中心系统,并减少表单手动编码的工作量
  3. 轻量级和高质量的页面
  4. 绝不使用 IFramePopup 窗口,因为它们的行为(我用 JavaScript 沙盒实现了这一点,这意味着:你加载的所有表单都将加载到同一个 DOM 区域中,并且它们会显示在 DIV 中而不是 IFRAME 中)
  5. 还有许多其他目标;最重要的是:一种新的标准开发方式,我特别喜欢使用元模型而不是模型,因为元模型具有更强的概念。

该系统是

  • 100% 全 Ajax
  • 完全不需要刷新(我再说一遍,不需要刷新,但你可以重定向,但也不需要刷新页面)
  • 页面加载速度快 5 倍
  • 并且首次
    • 在组件模型中实现了 JavaScript 沙盒支持(完全不需要 Iframes!)
    • 100% DB 中心系统

完成工作后进行比较。

我们出于相同的原因编写了相同的代码,并在三个不同的平台上进行了测试。在这里,您可以看到结果

如您所见,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 非常相似,但您可以拥有

    1. 行验证
    2. 字段验证

    大多数情况下不需要进行 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 ; }

    系统还将自动验证客户端和服务器中模型成员的类型。

    验证将显示在控件旁边,客户端将在发送到应用服务器之前显示一条消息。您可以轻松地为它们设置特殊的形状,但默认情况下,我们有四种不同的显示方式:1 - 发布前作为模态(DIV 模态而不是弹出窗口!)2 - 在左上角作为工具提示在您键入时显示 3 - 自定义方式 4 - 在编辑控件的左侧或右侧空间

    Components

    每个控件都应具有一个 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 个其他即用组件

    在下面的图片中,您可以看到一些使用该系统设计的页面,请注意这些选项卡不是 IFRAMES,但它们来自不同的来源,并且它们使用 JAVASCRIPT 沙盒模型,您始终可以从服务器端运行任何 JS 命令而无需刷新。

    MVC PLUS 2.00 现在支持以前不存在的 TREE 模型

    • Tree 模型有两种方式,手动或自动,它使用递归模型。不需要任何特殊代码。
    • 只需在模型中启用 Tree 属性
    • Model.IsTree=True;
    • 然后是视图中的
    • @Html.WLTreeFor(m=>m.Person)

    Ryan Samiee

    BCs 和 16 年专业经验(从 14 岁开始作为专业开发人员与公司合作)以及 14 年 Delphi 组件开发经验,然后是 Web 组件开发经验。

  • © . All rights reserved.