Charley Blog 代码剖析【开发伊始】

上一篇中我介绍了Blog的一个基本构成。这一节,就要开始踏上开发的长征了。


小YY怡情,大YY伤身

做自己的东西,往往饱含激情,满怀期待。不过往往一不小心容易染上妄想症。在开发之初,Blog一度拥有了神一样的天赋,诸如“弹幕式评论”、“自动换肤”、“完美的社交功能”等等,随着YY的深入,发现实现这一系列功能变得相当不现实,直接的后果就是放弃ing(“美好的东西还是应该保留在脑海中”)。这种思想持续了好一阵子,当然.......结果是显而易见的,要不然今天你也不会看到这篇文章了。


不打无准备之仗

毛主席说过“不打无准备之仗”,尽管是自己的项目,咱也应该认真对待。需求调研、项目计划通通不能少,这次咱们就要扮演项目经理的角色。


需求调研很简单,列一张问题清单,把自己关在一个屋子里,关闭电脑屏幕,打开音乐,按照清单自问自答。

图 1:问题清单



项目计划嘛,因为咱一个人充当了项目经理、项目负责人、开发、测试等角色,所以只要把最重要的进度写清楚就OK了。一定要把每个阶段所要完成的东东写下来,一定要写下来!我就是因为没有写下来,导致在后面的开发过程中,无法跟踪进度,一度有种很迷茫很挫败的感觉。


最终,我自己的答案是:

功能需求:发表文章、发表评论、用户登录、文章管理
非功能需求:与童鞋们分享心得;学习使用EntityFramework、ASP.NET MVC、HTML5等技术
用户:自己
进度安排:先实现文章列表显示(如现在的首页)、文章Detail显示;接着实现用户登录、权限管理再然后实现文章管理(发表、修改、删除)、用户管理、评论最后实现附加的一些功能(如第三方登录、意见建议等)。
截止时间:最终版本需要在2013年4月份前完成


有些童鞋,尤其是开发出生的小盆友,经常会忽视这个准备动作,拿起键盘就开始敲代码。除非你能力出众,否则这样只能使你在项目中期逐渐失去对项目进度的控制力。当你无法控制项目进展时,那么完成项目的可能性也就越来越小了。至于这些文档的格式,只要自己能看懂,天马行空都无所谓。


环境

思路理清了之后,就该开始准备开发环境了。古语有云,“君欲善其事,必先利其器”,好的环境能让你在整个项目开发、测试等环节事半功倍。本系统开发所需的环境中最重要的非电脑(晒晒我的机器:Xeon 4核 3.2GHz,8G,x64,Win7,如下图所示)莫属了。开发工具则包括Visual Studio 2010、TFS 2010、Sql Server 2008 R2。

图 2:偶的电脑(硬盘拉了很多分)


由于不是公司的项目,在写代码的时候有了很大的随意性,每次对代码进行修改后,也并没有按照良好的规范将修改的代码进行check-in,浪费了TFS的功能不说,主要丧失了对代码进行回溯和比较的能力。这对于代码的维护是一个很大的困扰。


设计草图

在开始写代码之前,还有一个很重要的步骤 ----“设计”。这其中又包括架构设计、数据库设计和UI设计。


架构设计

架构,这个词在我心中一直是个很神秘的东东,这次也是想借此次开发的机会体验下架构设计的乐趣。咱还是用自问自答的模式:

: 用户会从哪些地方浏览我的这个系统?

:PC端的浏览器外还有移动端的浏览器或者APP。

结论:不同的入口除了在显示效果上有明显不同之外(移动设备往往因为尺寸小而需要舍弃一些多余的修饰,重点突出内容),内部的实现逻辑可能也会有天壤之别。因此我的架构必须能在保持业务不变的前提下,同时提供多种不同的能力供多种设备使用。


:如果在产品发布之后,需要调整“评价建议”的业务逻辑(从不需要登录即可提建议到必须要登录才能提建议),却又不能修改原有的代码(已经编译成dll),那该如何让系统使用这个新的逻辑呢?

:不改变原先的代码,那就只能新建一个类来存放新的业务逻辑。同时架构上也要支持新类的热插拔。

结论:这需要我们的上层模块依赖抽象而非具体。把类实例化的动作从上层模块中抽取出来。


:数据库呢?如果日后发现数据库有瓶颈,能简单地迁移到新的数据库上吗?

:与上一问一样,数据层的变化不影响到上层模块的调用,就必须要依赖抽象。


综上所述,我首先需要三层架构(表现层、业务层、数据层),其次需要在层与层之间加入接口层用于将依赖转移到抽象上。就如图3所示:

图 3:架构草图


再把MVC加上去,就该变成这样了:

图 4:加上MVC后的架构草图


数据库设计

由于我采用的是EntityFramework作为我的ORM框架,而且打算使用Code First来自动生成数据库。因此数据库设计实际上是数据模型的设计。根据系统的业务特点,我画了一个最基本的草图。

图 5:数据模型草图


UI设计

光有一腔热情,却少了些许艺术细胞,想要建造一个世界上最豪华完美的页面,却压根无从下手~~~  实在是令人捉急呀。后来想明白了,既然这一时半刻弄不出个惊天动地,咱就先来个小打小闹呗。于是,我就花了一点时间,把主要的几个页面布局给暂时定下来了。

图 6:内容页设计草图


图 7:首页设计草图


理清了思绪、准备了环境、完成了设计,下一步就该开始进入编码阶段了。


结语

需求分析、项目计划(进度安排)、概要设计这些都必须在正式编码前有一个相对明确的答案,这样才会有助于指导日后的开发。有些时候我们可能无法一下子对需求有非常清晰的认识,这时候我们可以采用敏捷开发的思想对项目进行分而治之。


文章索引

[隐 藏]

本站采用知识共享署名 3.0 中国大陆许可协议进行许可。 ©2014 Charley Box | 关于本站 | 浙ICP备13014059号