Windvoice架构介绍

经过艰苦卓绝的奋斗,windvoice终于部署上线了,从开发伊始便一直在尝试如何能够避免三层架构的繁琐又能实现快速开发,后来,采取了MVC3+ActiveRecord的结构,由ActiveRecord提供M,C大部分由VisualStudio生成,这样,就可以把精力集中在V的实现上。windvoice的开发还使用了很多开源项目和工具,最终部署运行在了Ubuntu + Apache + Mono中,觉得开发过程中很多经验和教训值得总结,同时这种架构非常适合极低成本,小访问量,方便移植,快速开发的场景,下面详细介绍。

1. Rich Model

三层架构中的Model体现了职责分离的原则,但实际开发的过程中,由于业务层和数据访问层的职责划分往往执行不够严格或者难以把控,就出现了大多业务层的代码只是转接数据层,或者把大量业务逻辑堆积在数据访问层的情况,造成了项目优美程度的降低。

MVC中的M,由其定义,更应该是一个行为完整的对象,而非将这个对象的属性和其方法分离,但分离又能带来高内聚的好处,所以综合参考了一些其他项目的做法,windvoice的“M”采用了Partial Class,一个部分完全由生成器生成,仅包括了对象属性的描述,另一个部分手动修改,包括所有静态和实例方法,由于继承自ActiveRecord,Model无需编写繁杂的CRUD。这样,项目进行过程中大部分的修改在方法Partial中进行,避免了属性Partial的改动--字段变动时重新生成即可。但同时由于引入了Partial,也引入了风险,windvoice中采用不同文件夹相同文件名的约定保证Partial类在固定位置下同名出现。

 2. 开源组件

windvoice中从前段到后端使用了很多开源组件,丰富功能的同时节省开发时间支出,详细介绍如下。

名称 用途
jquery.cookie 读写cookie
jquery.lightbox Album中,显示单张图片
jquery.uploadify 后台管理一次上传多张图片
jquery.validate 自动验证
prettify 编辑器插件,高亮显示代码关键字
xheditor 轻量级编辑器,简单易用且易扩展
Minimalistic XHTML/CSS Template 简单的三色两栏布局模版,节省布局css开发
Castle ActiveRecord 以NHibernate为基础,提供数据库对象映射
NHibernate ORM数据访问解决方案
Lucene.Net 关键词搜索、提供相关文章栏目内容
PanGu Segment Lucene下的中文分词
Html Agility Pack 验证html输入内容的合法性
Sqlite.Net 数据持久层
OpenSinaAPI 用于新浪微博用户接入,节省OAuth开发时间
Log4net 日志纪录

 

3. Linux下的部署

鉴于目前很少有虚拟空间能够提供.Net 4.0 Mvc3的运行环境,即使能提供的,价格也贵不少,所以windvoice从一开始就做足了兼容Mono的准备,在部署及在Mono环境中运行的过程中遇到很多问题,大部分是Linux和windows路径的大小写和分隔符问题,其余问题由于使用开源软件,需要时可以跟踪入开源组件内部,检查问题出现的原因。之前的几篇博客介绍了Linux下Apache2 Mono中承载Mvc3的环境搭建Mono下配置ActiceRecord使用sqlite数据库,以及Asp.Net Mvc3在Mono中部署的两个问题,经过了这些尝试,最终购买了photonvps的VPS,$5.95/月,按当前汇率,大约37块人民币一个月,价格相当低廉。VPS的配置是Ubuntu10.04 128M内存,搭建了Apache2+Mono环境后,基本运行没有问题,但压力测试发现并发能力很不理想,而且内存占用较高,下一步计划尝试采用Nginx作为web server,看看是否能够提高并发能力降低内存占用。

posted @ 2012-03-11 22:25  傲雪啸风  阅读(237)  评论(0编辑  收藏  举报