惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
S
SegmentFault 最新的问题
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
F
Fortinet All Blogs
TaoSecurity Blog
TaoSecurity Blog
D
Docker
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
宝玉的分享
宝玉的分享
腾讯CDC
Google Online Security Blog
Google Online Security Blog
Recorded Future
Recorded Future
T
The Exploit Database - CXSecurity.com
T
The Blog of Author Tim Ferriss
V
V2EX
S
Securelist
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
CERT Recently Published Vulnerability Notes
A
Arctic Wolf
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Y
Y Combinator Blog
P
Proofpoint News Feed
T
Tor Project blog
AWS News Blog
AWS News Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
博客园 - 聂微东
T
Threat Research - Cisco Blogs
B
Blog
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
N
News and Events Feed by Topic
博客园 - 司徒正美
H
Help Net Security
C
Cisco Blogs
C
Check Point Blog
S
Secure Thoughts

博客园 - Loning

性能对比:aelf智能合约运行环境性能是evm的1000倍 aelf帮助C#工程师10分钟零门槛搭建DAPP&私有链开发环境 手机跨平台方案介绍 pInvokeStackImbalance MDA 异常解决方法 天津大学免费上网,IPV4及IPV6同时共享的解决方案 基于事件通信的轻量级MVP框架实现,附源码 Git初始化的相关问题 解决mysql表已满的错误 Publish 提示与目标版本不同 C++关闭在debug模式下的“Microsoft Visual C++ Debug Library”对话框 Qt 中Enum进行反射来做Enum to QString 我的OO实践---由GPS消息处理抽象出一通用命令处理类 敏捷开发读书笔记 谈谈我处理异常的一般方法 微软学生技术俱乐部夏令营的一些感受 N95当手柄玩游戏,甩起来还可以用手势控制电脑,分享一下我们的设计经验 这个回答真逗- - 收到开Windows 7 party的资源了【无图无真相】 初探MS SQL CE+Codesmith
纪念那个死去的ASP.NET CMS系统,附死了的源码
Loning · 2010-12-12 · via 博客园 - Loning

    该项目是在高中保送之后的那段时间开发的,那时朋友希望放弃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/

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