InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

反思MVC中的模型

作者 Jonathan Allen 译者 贾国清 发布于 2011年6月12日

领域
架构 & 设计,
语言 & 开发
主题
JSON ,
ASP.NET MVC ,
动态语言 ,
标识语言 ,
ASP.NET ,
设计模式 ,
.NET ,
语言 ,
MVC ,
编程 ,
模式 ,
面向对象设计 ,
设计

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

译者 贾国清 是InfoQ中文站高级策划编辑,热爱生活,喜欢旅游和体育运动。

不知所云 发表人 Wei Todd 发表于
这个是趋势 发表人 hu fox 发表于
一切为了便捷 发表人 许 晓磊 发表于
  1. 返回顶部

    不知所云

    发表人 Wei Todd

    rt

  2. 返回顶部

    这个是趋势

    发表人 hu fox

    使用json对象提交数据,需要序列化为string。
    反序列化为对象,则比较难,涉及到各种类型转换和泛型的问题

  3. 返回顶部

    一切为了便捷

    发表人 许 晓磊

    一切为了便捷