2008/12/20

关于Oxite的教训

必须得坦率的面对,这不是一个好的案例,而是一个好的教训。

事情得从12月5日Platform D&E (developer evangelists) 部门下面的MIX Online团队将他们自己开发并正在使用的内容管理引擎项目Oxite的源码发布到社区开始说起。现在的官方简介是:

Oxite (alpha) is an open source, standards compliant, and extensible content management sample that can run anything from blogs to big web sites. We know this because it runs MIX Online.

作为目前还没有正式推出的ASP.net MVC的又一个开源项目,这本来是个好消息,社区的反应一开始也很热烈很正面,但和微软发布的其它示例不同,社区接触Oxite不久质疑的声音开始出现了。Oxite的简介暗示了Oxite可以被作为ASP.net MVC的官方范例而在社区推广,但Oxite的设计质量却可诟病处不少,这是一个可以借鉴的good example吗?

社区里的公开反馈其中以Rob Conery的分析意见最为透彻。这位仁兄是受Ruby on Rails框架的Active Record模式启发的SubSonic项目的创建者,以其对MVC模式的深刻理解而被招揽到ASP团队中促进ASP.net MVC的开发,Rob Conery现在自己也个人维护着一个ASP.net MVC的示例项目StoreFront。

Rob Conery认为:

  • Oxite最关键的缺陷是跨站点脚本攻击(XSS)漏洞。基于ASP.net MVC设计上与Web Form的区别,在这点上ASP.net MVC开发时本来要做的工作就要多得多。
  • 基于Repository模式的数据存取层使用provider模式实现,但却刻意地注释掉了Singleton模式的代码,这一点让人非常疑惑而且做法并不高明。
  • Oxite将Controller与View分开放在不同的项目下,类似于分层架构设计中的业务逻辑层与呈现逻辑层的分离,这直接导致Controller的代码实现变得累赘。这恰因为Controller并不仅仅处理业务逻辑,而Oxite设计上对此理解有了偏差。
  • Oxite中Controller的实现耦合度较高,一个名为AdminController的对象几乎包办了一切。
  • 滥用ViewData,违反了MVC模式的精髓就在于保持Controller与View的轻快,易于测试这一原则。
  • 对辅助组件实现的不当设计。Script/CSS这类与View实现相关的输出放在了Control实现中管理。
  • 对View实现的处理不完善,比如上面提到的XSS漏洞。

Javier G. Lozano甚至不客气的说:

I think one important thing to note is that Oxite serves as a good example of viewing an MVC implementation from a "WebForms state of mind".

除了Oxite架构设计上的不足外,Rob Conery还提到了一个观点,说起来这属于公共关系的处理领域了,作为Microsoft雇员或团队,当对外部公开谈论某些事情的时候,公众不会认为这是一个独立个体的声音,他们会认为“微软开始。。。”或者“微软发布。。。”,把个人意见作为公司立场。这种误解不会使好的事情变得更好,却会使坏的事情变得更糟,比如Oxite这次造成的错觉。因为据Scott Hanselman的解释,Oxite这次推出并没有经过内部规范流程的审查:

The fact that PhilHa, who owns ASP.NET MVC, didn't know it was going on, kind of makes that point. Any samples from Microsoft that intend to show a Best Practice should be reviewed by Phil, and certainly vetted by the community. David Nelson nailed that point clearly.

最后,Glenn Block为此次事件做了解释,同时,Rob Conery也开始帮助MIX Online团队对Oxite进行重构。从架构设计和项目管理上,这次Oxite事件都给了我们深刻的反思:

  • 要谋定后动
  • 要虚心倾听

转载于:https://www.cnblogs.com/cxd4321/archive/2009/09/17/1568695.html

关于Oxite的教训相关推荐

  1. ASP.Net MVC Relational KeyWord 4 Google 【More...】【欢迎补充】

    [项目]or[BaseOnMVC] MVC Kigg Oxite MVC Storefront/MVCStore Blog CodePlex Stack Overflow NerdDinner Ezs ...

  2. 工业界AI项目落地血泪教训总结

    工业界AI项目落地血泪教训总结 人工智能是近几年最火热的技术名词,如果不谈人工智能相当于落伍,但当真正进入人工智能领域时才发现,一开始以为"拦路虎"是算法,后面发现落地是一个巨大的 ...

  3. 【Qt】一个使用QEventLoop时,遇到的教训

    1.问题描述 伪代码如下: QEventLoop eventLoop; QObject::connect(this, &Class::signal, [](){doSomething();ev ...

  4. 沈航计算机复试刷人,过来人的血泪教训:复试被刷原因大盘点

    当前正处于19考研尾声阶段,20考研备考基础阶段.后台有不少同学在询问,看到一些院校的报录名单,发现不少高分同学也会被淘汰.究其原因,看看过来人的血泪教训吧~ 常见原因 1 专业水平较低 一般来说,考 ...

  5. 前端技术选型的遗憾和经验教训

    我是Max,Spectrum的技术联合创始人.Spectrum 是一个面向大型在线社区的开源聊天应用程序,最近被GitHub收购.我们是一个三人团队,主要拥有前端和设计背景,我们在这个项目上工作了近两 ...

  6. 我在React Native中构建时获得的经验教训

    by Amanda Bullington 通过阿曼达·布林顿(Amanda Bullington) 我在React Native中构建时获得的经验教训 (Lessons I learned while ...

  7. 2018 react 大会_React Conf 2018的经验教训

    2018 react 大会 by Yangshun Tay 阳顺泰 React Conf 2018的经验教训 (Lessons Learned at React Conf 2018) I was fo ...

  8. 山寨上网本溃败的两点教训

    不是马后炮. 08年11月份,笔者写过一篇<上网本难以复制山寨机的辉煌>(以下简称<辉煌>),从消费取向和价格两个方面着手,分析认为山寨上网本市场有限,难以复制山寨手机的市场奇 ...

  9. 6个你必须知道的机器学习的革命性的教训

    加入「公开课」交流群,获取更多学习资料.课程及热招岗位等信息 作者 | James Warner 编译 | ronghuaiyang 来源 | 转载自AI公园(ID:AI_Paradise) [导读] ...

最新文章

  1. BZOJ3682 : Phorni
  2. Android之UI控件
  3. NLP之WE之Skip-Gram:基于TF利用Skip-Gram模型实现词嵌入并进行可视化、过程全记录
  4. leetcode--207. 课程表
  5. 关于真正免费的嵌入式GUI
  6. 每日一笑 | 我写了一段代码,为什么不能运行呢?
  7. java akka_用于大型事件处理的Akka Java
  8. android 布局防抖动,Android全屏返回布局抖动问题
  9. WM_TIMER消息在线程被阻塞时的系统处理
  10. MATLABr2006a序列号
  11. “杜绝电子垃圾,我们需要软件永远更新下去!”
  12. 命名空间提示“http://schemas.microsoft.com/xaml/behaviors”不存在Interation的解决办法
  13. iPhone手机拍的图片为什么电脑上打不开?秒懂
  14. android 转场动画 监听,Android 中的转场动画及兼容处理
  15. 3dmax 焊接顶点死活焊接不上的爬坑日记。
  16. java实现shapefile文件的解析
  17. 【分享一个好看的Android item布局 使用于ListView,RecyleView JAVA版本(二)】
  18. Java-命令行版中国象棋
  19. JS数组合并的7种常见方法
  20. python 日历壁纸_Excel+Python=精美DIY壁纸日历

热门文章

  1. .NET微信公众号开发系列 - 项目介绍
  2. python面试题(5)--- 检测 字符串 是否可以转换成 数字
  3. 服务端渲染SSR的理解
  4. 邮件退订_如何方便地退订邮件列表
  5. linux成为管理员_成为系统管理员需要知道的
  6. javacv入门指南:序章_建立开放文化的循序渐进指南
  7. 什么是闪电网络节点_为什么以及如何计划闪电谈话
  8. Kali Linux之软件安装、卸载、更新和修改更新源
  9. Bootstrap3 全局样式
  10. 下载Bootstrap3源码版本