代码改变世界

纪念那个死去的ASP.NET CMS系统,附死了的源码

2010-12-12 17:08  Loning  阅读(4389)  评论(21编辑  收藏  举报

    该项目是在高中保送之后的那段时间开发的,那时朋友希望放弃ASP的CMS开发,转而做其他平台,由于我对.NET比较喜爱,便强力推荐他做.NET的。不过由于当时我比较追求所谓的架构,朋友也不怎么理解,最后就自己一个人做了。当时也是一边学习一边做,很多东西理解的层次自然十分浅薄,比如三层,当时根本不懂,以为一个项目就是一层,接口单独出来一个项目以为又多出一层,呵呵。做也是比着葫芦画瓢,抄PETSHOP。但是真的做完这个项目,我对.NET才算是真正了解了。记得当时也是在园子吧,看天轰穿老师的视频,学到好多控件的用法。

    由于当时就认识到.NET WEBFORM效率极其低下(每次数据回发量太大了)、页面元素难以控制,因此在网站前台决定不使用ASP.NET的任何控件,完全基于类似ASP、PHP的输出方式。当时不了解MVC,ASP.NET官方的MVC也没出来。而在web的后台,为了开发的便捷性,使用了WEBFORM,当然后果是十分严重的,最近用chrome打开后台发现菜单错位了,好在IE中还是正常的。但是如果没有WEBFORM,相信我一个人难以做出那么多东西来。便捷的东西就是这样,很难以去控制其中的方方面面,即便是有一些方法能够实现,在真正实现之后发现比自己写一套还要麻烦。

Figure 1 错位了

    该项目是比着PETSHOP做的,因此分了三层,在数据层使用了一个支持ACCESS与MS SQL的组建(其实并不是完全兼容的,只是在这个项目中没用到譬如触发器之类的东西罢了,当时居然还会考虑ACCESS…)。因此对两种数据库有一些兼容性,比较讽刺的是兼容却放在Data Layer来做了,其实自始至终也没实现过其他的Data Layer,然后这个项目就死掉了。

    先说说后台的开发吧。微软还是很强大的,能在WEB上做出事件驱动来。感觉很强大的就是数据绑定功能,在三层的基础上,我只要为每一个Data Source指定一个Business Object,.NET就可以通过反射自动的提供相当多的信息到Grid View,Detail View里面,然后需要修改的地方就是改改每个Column的Name。对于需要特定显示的地方,还可以更改相关控件的模板,在模板中可以用各种各样的控件,而且也是支持绑定的,所以在这一层的工作相当清晰,就是控制数据的表现形式。而且通过Data Source,可以很轻松的实现几个控件的联动。Data Source可以很方便的绑定Business Object提供的方法的相关参数,可以绑定到Request,绑定到某个控件的属性。

Figure 2 后台界面截图

    在后台的开发过程中,对自定义服务器控件,自定义用户控件等都有了一定的了解。控件化的好处就是拿来就用,FCKeditor(现在应该叫CKedirot了)的那个控件很轻松的就融入了系统。还了解到了ASP.NET的权限控制,对目录的权限也可以有,在系统中也加入了相关的配置页面。

    在前台,受朋友开发的ASP系统的影响,引入了使用标签的模板系统。自己写了一套asp.net的小型模板,标签形式都是自定义的,而且是可扩展的,也用了反射。但是现在看来,用反射而又没有做一些处理,效率应当是十分低下的。其基本工作原理就是正则表达式匹配标签,而后通过标签的进行多态,把相关的内容返回然后REPLACE。后期发现确实挺慢的,还引入了缓存,其实就是很傻的放到ASP.NET的内存中,缓存策略也很傻,更改时删掉那个缓存项。

Figure 3 前台某模板界面

    前台直接实现了一个Http Module,这个Module是可配置的,也是通过反射来加载一些模块。现在看来Http Module有点像Router,加载的模块有点像Controller了。

Figure 4 配置节点的一些信息

    前台的交互则是使用的jQuery + Web Service,由于Web Service支持Json的序列化,所以相关数据交互还是很轻松的。

Figure 5 基于Web Service与 JS 的登录系统

    这么多层,代码自然不是全部是自己写的,用了代码生成器来做跟数据库有关的事情。自己下了个模板改了改,就是这样。

    对.NET的配置有了一些了解,譬如如何自定义配置节点。强类型的配置信息还是比较好用的,最近在WINFORM下做配置信息都没那么麻烦的做过了,直接用Settings。也没有比较过二者有何不同,或者就是一样的?

    用户系统则使用了ASP.NET的Membership,挺强大的,而且不用那些登录控件也完全可以实现登录。自己实现了一个Membership Provider,毕竟要使用三层中的Data Layer。

    已经很长时间没动过这个代码了,今天翻硬盘的时候偶然发现的,但是又不忍心删掉,写此文以纪念。

    代码在此提供下载:http://wiisio.qiqikaka.com/kingcms.7z

    用户admin 密码 123456

 

作者:马昊伯 a.loning at gmail.com

出处:http://loning.cnblogs.com/

 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利。