BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

反思MVC中的模型

| 作者 Jonathan Allen 关注 596 他的粉丝 ,译者 贾国清 关注 0 他的粉丝 发布于 2011年6月13日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

不知所云 by Wei Todd

rt

这个是趋势 by hu fox

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

一切为了便捷 by 许 晓磊

一切为了便捷

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT