反思 MVC 中的模型

  • Jonathan Allen
  • 贾国清

2011 年 6 月 12 日

话题:.NET设计模式语言 & 开发架构

J​on Galloway 正在进行一项关于动态化 ASP.NET 的 MVC 3 框架的研究,该研究基于将编译器作为服务的思想。与此同时,Karsten Januszewski 也在寻求反序列化 JSON 的方案,以此来达到替代静态模型的目的。

通过 Mono 编译器以服务形式实现的动态模型

虽然和微软提供的编译器即服务的方案还有两个版本的距离(注:C# 的最新版本为 5.0,Mono 默认编译器基于 3.x 版本特性实现),Jon Galloway 已经着手在最新的 Mono 编译服务的基础上开始了他的研究。Mono 编译器的积极发展,同时也为继承 C# 5 的异步语言结构奠定了基础。

Mono.CSharp.Evaluator 是一个基础类。通过调用其中的 Run 方法可以处理任何传入的 String 对象。另外还有 Evaluate 方法,该方法同样接受一个 String 类型的参数,随后会处理并返回传入表达式的运算结果。从这点上看,和动态语言运行时或是古老的 VBScript 中提供的 API 很相似。

将 JsonObjects 作为一个模型

Karsten Januszewski 的研究则采用了截然不同的机制。他先利用WCF 的 JSON 类,从服务层得到 JSON 格式的字符串。然后再将字符串转化为 JSON 对象,这样就形成了一个基本的模型。这样做的缺点就是没有任何业务逻辑的表示:模型完全由纯粹的数据构成。

同其他 MVC 用户一样,Karsten 在研究中也遇到了一些常见的问题和精妙的解决方案。简单来讲,LINQ 生成的匿名类型与 MVC 中使用的 RuntimeBinder 类型不兼容。也可归纳为“匿名类型与动态类型的不兼容”。幸运的是现在已经找到了解决方案。方法很简单,只需用一个 JsonObject 实例来替换掉 LINQ 表达式中的匿名类型即可。

​查看英文原文:Models in MVC

.NET设计模式语言 & 开发架构