结对编程2 微软学术搜索 第二部分 项目开发的不足

微软学术搜索 第二部分 项目开发的不足

我作为微软学术搜索长时间来的用户,虽然使用频率不高,但学术搜索确实帮我解决了很多问题。在阅读了邹老师关于微软学术搜索项目的历程介绍之后,我综合分析得到以下几点问题:

1. 前台代码规范问题

根据邹欣老师教程,结合本人日常开发的总结,我认为微软学术搜索在前台开发上存在如下几个问题:

1.1 JQuery代码与前台代码混用问题

查看首页(http://academic.research.microsoft.com/)的源代码,我们可以在<head></head>标签内发现对JQuery的引用。

JQuery是一个十分流行的Javascript框架,那么,既然使用了JQuery,根据使用JQuery的习惯与业界普遍赞同的编码规范,页面内所有对DOM元素的操作都应该通过JQuery实现,而不应该再使用丑陋的getElementById方法(否则就失去了使用JQuery的意义~)。但是,我们却赫然发现了下面的代码:

如上图所示,页面中同时使用了JS原生的getElementById()方法,以及JQuery的$(selector)方法,虽然两者的功能是一致的,但考虑到后期的可维护性已经对编码规范的遵守,应该统一使用JQuery风格的DOM操作方式。

1.2 HTML页面标签内嵌CSS样式的问题

下图截取的代码为网页底部栏目的html代码。

可以看到,这个div引用了footer class,而让人费解的是,div标签中却仍旧有内联的CSS样式属性(style="height: 30px;"),对于前端开发而言,这是一种很不好的习惯,因为对同一个标签的控制分散到了不同的地方,很不利于代码的维护,即使在学霸的UI中,我们的前台DEV也不会做这样的事情

从标签风格来看,这个div应该不是asp.net自动生成的,那么前台开发人员在书写其css样式时,应该将其所有样式放到footer class里。

1.3 HTML标签内嵌JavaScript函数问题

从下图可以看出,页面的标签元素中内联了很多javascript函数,而根据一般的js编码规范,js函数应该单独放到<script></script>标签内,html的事件(如onClick)应该直接饮用js函数名,而非直接在onClick事件中定义。

结对编程2 微软学术搜索 第二部分 项目开发的不足_第1张图片

这样做,会有以下几个问题:

1. 不同的事件,其处理函数可能相近,内联定义会造成代码冗余

2. Html代码与js代码高度耦合,当代码量达到一定量级后,可维护性会很差

在学霸UI中,所有的js代码均位于Header标签内的<script></script>标签中,方便了引用与维护。

从以上几点可以看出,beta版本的微软学术搜索在前台代码的代码质量控制上可能有所疏忽,希望能够引起重视。

2. 关于开发技术手段的问题:对与合理使用asp.net服务器控件的探讨

仅从微软学术搜索的首页来看,可以发现,页面大量使用了asp.net技术,具体表现在几乎所有的div的id都由ct100打头。

使用asp.net的服务器控件可以简化UI的开发流程,但是,从我个人的观点,不恰当的使用反而会带来以下几个问题:

  1. 控件的状态须由IIS维护,不必要的控件产生的无用状态加重了服务器的负担
  2. 部分可以通过前台技术(如js)实现的功能通过服务器实现,不利于充分利用客户端浏览器的处理能力(动辄酷睿cpu,甚至浏览器支持gpu渲染),且加重了服务器的负担。
  3. 对于前台的某些功能,因为采用了控件,既需要编码人员参与,又需要前台工程师参与,不利于协作与分工

3.  关于项目开发流程的问题

邹老师的博客上有这样一句话:

由于项目的绝大部分模块都进行了大规模的工程性重构,重写。有些问题太难, 研究员们逐步撤出了项目。

根据博文,可以发现,在M1阶段,研究员与工程师共同参与,我虽然不清楚他们是否共同参与编码,但从上文可以看出,M1阶段可能没有采取比较好的架构,或者比较好的设计模式,导致项目在迭代过程中需要进行大规模的工程性重构,但代码重构对于一个项目来说,是很可怕的(我曾经看到过一篇博文,讲的是代码重构(重写)标志着项目的失败,具体链接无从找寻)。

因此,我猜测,M1阶段的研究员与工程师可能共同参与了编码,但很可能由于研究员的编码风格可能不是面向工程的,导致M1阶段的代码存在架构上的问题,否则为何要大规模重构?之前不是根据MS Agile,进行了2周的计划了么?恳请邹老师解答~

你可能感兴趣的:(编程)