分享
 
 
 

开源论坛stella公开+新手指南

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这是我前些日子写的那个论坛,现在终于可以公开了!下面是下载地址:

http://www.mikecat.net/blogview.asp?logID=935

里面的内容是:源文件安装文件(数据库自动安装)、“如何制作自动安装数据库的web安装程序”的教程,stella forum 的文档、model类的uml视图、必读手册。还有一个新年礼物 :)

先祝大家可以顺利的安装完,因为我这个安装程序做的不是太好……

下面我写点指南性的东西,从.net初学者的角度(因为我是初学者,所以我的角度就是初学者的角度,这个逻辑没有问题吧)分析一下我的论坛。

0.model类设计

1.单件和计时器的使用

2.缓存控制

3.性能优化

4.安全性控制

5.疑难

0.model类设计

刚开始设计这个论坛的时候,我正在看《设计模式解析》,这本书上关于oo设计的一些讲解着实让我大开眼界,于是我就试着从oo的角度来考虑问题。我的思想就是把整个论坛看成一个对象,然后论坛包含区域,区域包含版块,版块包含主题,主题包含帖子,而帖子里有会和会员联系起来。最后做的时候因为这个只是传递数据,所以就把行为从对象剥离,得到现在的model类。

但是后来在做的时候发现这些model类要真正的实现包含等关系,其自身还得需要一些行为的,于是就把一些类里面安放了arraylist,这样实现起来就比较方便了。

1.单件和计时器的使用

怎样对论坛里的一些数据进行统计?比如总点击量,某一版块的发贴数?这些数据直接提交到数据库几乎是不可能的。因为变动太快。每次都提交的话数据库会吃不消。于是我就想到了用单件来统计数据,然后定时提交的办法。

modle里面那两个xxxinfosum类是比较特殊的,他们表示的是一些统计数据,为了保证统计的正确性,于是就把他们做成了单件,这样统计数据就不会出现偏差。计时器在应用程序初次启动时开始运行,然后这些数据通过记时器的控制定时向数据库提交。

不过大家在测试的时候可能会有些问题,比如帖子数,这个每发一个帖子论坛数据库就增加一个帖子,然后记数器也加一,但是因为是定时提交的原因,如你在数据还没有提交到数据库就把服务器重起了(或类似的情况,比如动了web.config),那数据就会请零。所以就出现了明明论坛里有帖子但是计数器却显示0的现象。这个大家明白就好了,因为当你真的开始使用论坛的时候,服务器是不可能重起的,计数器也不会被请零。

2.缓存控制

使用缓存是提升性能最直接的办法,这个论坛也大量使用了缓存。大家可以看缓存控制器类里的东西,缓存包括了论坛结构、公告、斑竹、新帖子等。

如何监视数据的改变从而改变缓存是难点之一。在.net 2.0我们发现可以直接监视数据库,但现在的1.1没有办法,框架不提供这种服务。于是我只好手动来完成。通过使用“委托+事件”机制,在business层设置此功能。当表示层把要求传到业务层的时候,如果该请求涉及到缓存的数据的数据库源数据的改变,就对外发布一个事件,然后表示层订阅此事件的响应类得到通知后,就可以把缓存删除。从而达到重新缓存的目的,避免了缓存数据的不一致。

有人可能会问,为什么不直接在表示层操作缓存,比如发出一个请求,然后直接把相应的缓存删除?如果缓存的项目较少,这样做也可以,但是如果比较多,想我写的这个,光键值就十多个,如果一个一个来的话,肯定会晕掉。但是通过上面的办法则可以有效的避免这种情况。处理缓存失效的事件的方法可以只有一个,但是却可以供很多地方使用。

3.性能优化

关于性能优化,大家可以看这篇具指导性的文章

http://blog.csdn.net/notus/archive/2004/12/24/227564.aspx

我就是按照这个来的,呵呵。

a. 最大限度的利用数据库连接,一次连接做尽可能多的事。比如在论坛帖子详细页面,在查找相应页的帖子时,顺便返回了该版块的主题总数,供分页控件使用。还有在更新论坛信息时,打开一次连接后,连续执行数条sql语句来进行更新。

b. 使用缓存。这里包括数据缓存和输出缓存。数据缓存上面提到了。输出缓存通过相应的用户控件来完成。凡是不需要动态改变的,都做成了局部缓存。

c. 控制viewstate。这个大家可以看看显示到浏览器后页面的源文件,应该看不到长长的viewstate隐藏字段。因为我把不需要的viewstate都禁掉了。首先大家应该明白,像repeater和datagrid这样的东西,viewstate是绝对不能要的!你可以想办法来弥补由此造成的一些功能损失。虽然这样麻烦了些,但是绝对值。而那些小东西,比如一个按钮,viewstate该禁止也要禁止。

4.安全性控制

加密和角色控制是我要说的。

先是加密,这里主要是对数据库连接字符串和用户密码进行加密。前者使用了petshop的相关组件对保存在web.config中的连接字符串进行了加密。不过像懒人说的“防君子不防小人”。用户密码加密使用了sha1+salt的办法,这一套是从duwamish学来的。这个办法有个不好的地方,整个地球只有用户自己知道密码是什么,一旦用户忘了密码,事情就比较麻烦了。需要先生成随机密码更新数据库,然后把随机密码告诉用户(email),用户再把密码改成自己熟悉的。有文章说可以使用对称加密的办法,不过问题是钥匙该怎么保存?

角色控制就是使用了forms验证。三个角色各负其职,除了在web.config中设定外,还在代码中使用了特性对相应的方法进行控制,这样就算有人改了web.config,也没有办法执行超越权限的操作。

特别要说的是斑竹的控制,版块A的斑竹不能去版块B里删帖子,这一点很重要。为此我些了一个专门的判断方法,用来判断登陆的斑竹是否是该版块的斑竹。

5.疑难

自卖自夸了这么久,接下来我要说说让我头痛的地方。除去用户输入验证这些小东西,最让我难受的就是static变量的使用。我发现自己对clr竟然完全的不了解!还有就是多态的使用。这个也让我痛苦了好久。接下来是对gc机制的怀疑,ms给我们这么个东西,到底该不该信任?

总之,要学的实在是太多太多……

就写这么多了,还有问题大家就留言吧,如果我还能上网的话,就一定解答……

let us walk together,so as not lose our way!!

a happy new year!!

2005年再见!!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有