您的位置:首页 > 运维架构 > 网站架构

由一个朋友遇到的问题想到的关于程序的架构

2006-08-08 19:38 731 查看
如果不是一个有经验的程序员的话,在接触程序的架构,甚至是设计模式的时候,都会疑惑为什么要这么做。这个问题我理解,就好象是学面向对象一样,在学校的时候老师讲面向对象的基本概念,只能象记一个英语单词一样去背,而不会理解其为什么会有这样的规则,等到接触高级语言之后,有过走弯路的经验了,回过头来再看这些规则,以及架构,设计模式等知识,才真正理解,面向对象原来这么设计是非常的合理的。

记得在以前,我周围刚开始学ASP.NET的朋友都会问类似这样的问题,就是有类似a和b两个页,a页中有一个

protected void Button1_Click(object sender, ImageClickEventArgs e)

这样的方法,然后想在b页中调用这个方法,或者干脆就在本页的一个什么由控件双击“产生”的方法中来调用这个方法。而他们往往遇到的问题是,里面的那个参数(指sender和e)是什么意思,调用的时候先怎么生成这两个参数,然后又怎么传递他们到这个Button1_Click方法呢。

我觉得.NET和其它开发人员中的“过来人”都会为有这样的需求感觉到奇怪而好笑,甚至我当时也好奇的问,“你这到底是要实现啥功能啊?”,而那个朋友的答案另人苦笑不得:“我也不知道”。不过,今天回头思考这件事,觉得针对此问题,虽然有点搞笑,我们是否应该换一个角度来考虑。

刚开始接触ASP.NET的朋友肯定是对所谓的程序架构不是很理解,最起码我接触过的朋友大多数都是这样,但是仿佛都知道三层架构这个东西,也和老师课堂上讲过类似的有关吧,当然,这里说的不是老师课堂上讲的客户机-服务器-数据库这样的三层架构,虽然我上学的时候也混淆过。

这样一来,很多朋友(同学),当然也都看过或听老师讲过程序中的三层架构是什么样子,于是就单纯的把*.aspx页理解成表现层,*.aspx.cs理解成逻辑层,把数据库什么的理解成数据层。总之我身边大多数朋友刚开始都会有这样的理解,而这样我觉得也是很正常的,刚开始学不走点弯路学东西是很难记住的。所以,就基于这样的三层架构的理解,和面向对象的访问规则,当然,也都知道每一个页都是一个类,因为是个ASP.NET的教材或资料都这么说,所以,问出这样的问题是完全可以理解的,可能这也就是刚刚接触ASP.NET的朋友理解的封装吧。

从这件事中,我们多少会发现程序的架构意义所在。

我想大多数的朋友肯定会这么解决,就是把Button1_Click里面的代码都拷贝出来,在网站项目或者解决方案里新建一个类,设置好其访问规则,比如public static。然后在*.aspx.cs里引用这个类,在Button1_Click里调用这个定义好的方法,ok,以后还有哪个页面想用这个方法,直接拿过来引用然后调用就可以了。我想,这多少是封装的体现了吧,虽然从藕荷和内聚的角度来分析不如很多大型的架构那样完善,当然,那也不是本文所说的话题,希望通过这个总结能帮助更多的朋友来理解三层架构。

另外关于*.aspx.cs里的代码在三层架构中的位置,我觉得应该把其归属到表现层当中,这是我个人的理解,因为也有朋友问过我表现层不就是负责界面展现吗?没错,但是在*.aspx.cs里,我们确实是应该不让业务逻辑相关的代码出现在这里,出现在这里的代码应该是负责调度的,根据客户要实现的功能然后开发人员在这里决定应该调用业务逻辑层已经封装好的哪一个方法,而业务逻辑层怎么做这件事,甚至其是怎么和数据库进行交互的,*.aspx.cs完全不用干预。而假如,我们需要改进业务逻辑层里的代码,这里指改进,如果是流程变的话先暂不考虑了,毕竟以后还有WWF在。我们只需要改进相应的类里面的方法就可以了,改变规则也好,提高效率也好,总之只要类的接口不变,其它层与之的通信是不会受到任何干扰的。

有的朋友曾经问过我,小型的网站也要用三层架构吗?针对这个问题,我个人觉得,现在网站(指需要动态技术的,静态暂不考虑)成本是很低,并且也赚不到几个钱,不过我想做过的朋友都知道,即使利润再低的网站,客户也会折腾你个够戗,除非你是给亲戚做,那人家是给你送钱来的,故不在本文所讨论的范围之内。所以即使网站再小,也要做好应付变化的准备。根据以前做asp的经验,有些改动需要动很多地方,而asp那时候没有很好的封装特性,所以改动的地方都很散,而这么一散,就很容易造成疏漏,甚至哪些地方有问题都不记得了,所以,这也就是为什么会有“类”的这个概念,把相关功能都封装到一个类里,程序的哪个地方需要调用,直接来根据面向对象的访问规则去调用就可以,而如果有修改的话,直接改这个类就可以了,不需要牵扯到前台界面的转移---在asp的时代很难做到的。

还有一个朋友问我,说做一个网站需要这么复杂么。其实我觉得,假如用任何语言来写一个HelloWorld,当然不用弄什么启动界面,帮助文档。如果只是为了练习当然就无所谓了。

文章简单的很,希望对刚入门的朋友能有个帮助。最后我想说的是,不要怕走弯路,因为你们是刚开始学,即使有人帮你避免走了这个弯路,但是,等到真正走向工作的时候,很多人又会把这些“弯路”再找回来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐