伍迷家园

让编程融入生活
随笔 - 83, 文章 - 0, 评论 - 1582, 引用 - 164
数据加载中……

小菜编程成长记(十一 三层架构,分层开发)

(续上篇)
         “大鸟,我们继续讨论吧!”小菜很沮丧的说。
         “小伙子,不会修收音机也是很正常的,没什么大不了的,用不着丧着一个脸。好象失恋一样,男人再强也要学会说‘不’。”大鸟安慰着说,“如果你的目标是要成为修理电器专家,那么你连收音机都不会修,那是很郁闷的事。但你现在的目标是什么?”
       “我想成为软件架构师,编程专家。”小菜毫不含糊的说。
      “就是,你的人生目标很明确,别的方面弱一些有什么关系呢。”大鸟继续说道,“现在电视节目《波士堂》里请来的嘉宾,全是中国的大企业家,许多人身家上亿,节目中都要求他们要有一个Boss秀,难道真的要把他们的才艺去和人家艺术家比吗,我看老板们唱歌虽很业余,但却也感觉得到他们那份认真和情趣——原来亿万富翁也是会唱歌,会跳舞,会食人间烟火的。至于他们歌唱得是不是跑调没有人在意的,明白吗?”
      “我明白!,我一定要好好努力,成为编程专家。”,小菜说,“我们言归正传,你说我那程序用了反射后,还有什么需要修改的呢?”
      “嗯,好!”大鸟清了清嗓子,开始上课,“如果你的程序再也不修改了,或者就是改改打折的额度和返利额度,那么你的代码是足够可以了。不过需求却是会不断产生的。比如说,现在这个程序是单机版的程序,如果需要商场多层楼的所有收银机都要使用,那该怎么办?”
      “那用XML的配置文件就不合适了,应该用数据库会比较好!”
      “那么老板听说了C/S架构的坏处,更新麻烦,不够安全等等,他也不是傻瓜,每次更新都需要针对每台机器部署,一次就半天,那些工作时间他是需要给程序员付薪水的。所以他提出要改为B/S架构,客户端用浏览器支持,你怎么办?”
      “那需要改界面了,把应用程序改成Web程序。”
      “就你现在的代码,改起来容易吗?”
      “好象不容易,需要重新写,尽管可以复制一些代码过去,不过要重新写的东西还是很多的。”
      “好,那你有没有发现,我说了这么多的需求变动,但系统中有一些东西一直没有变,是哪些?”
      “我知道,是策略模式用到的那几个类,也就是正常收费、打折消费、返利消费等算法是没有变化的。”
      “是呀,其实不是算法不会变,而是之前我们已经考虑它很多了,用了策略模式,用了反射技术使得它的变化相对稳定。你刚才也说,要把应用程序改为Web是需要复制粘贴的,可实际上,改改界面和这些算法有什么关系?”
      “没有关系。”     
      “还有,把配置文件改为数据库访问,这其实是读取写入数据的操作,和算法又有什么关系呢?”
      “也没有关系,我知道了,你是说,他们之间完全可以分离开,互不影响,改动其一,不要影响其它两者?哦,这是不是就是所谓的三层架构?”
      “对,说得好,就是三层架构。三层架构或者分层开发说起来容易,在程序开发时的初学者还是有很多的误解。比如有些初学者以为,DBServer-WebServer-Client是三层架构,其实这是物理意思上的三层架构,和程序的三层架构没有什么关系。还有人以为,WinForm界面的窗体或者WebForm的aspx是最上一层,它们对应的代码后置(codebehind)文件Form.cs或aspx.cs是第二层,然后再有一个访问数据库的代码,比如ado.cs或SqlHelper.cs是最下一层,这其实也是非常错误的理解。再有,很多人认为MVC模式(Model-View-Controler)就是三层架构,这是比较经典的错误理解了。总之,尽管三层架构不算难,不过由于现在很多数书籍材料的讲解不透,所以让我们初学者都概念模糊,理解有误,非常的可惜的。”
      “啊,我一直以为MVC就是三层架构呀,看来真的弄错了。那么三层具体是什么呢?”
      “我不是已经告诉你了吗?你说说看,不管是应用程序WinForm,还是网页程序Aspx,它们主要用来干吗的?”
      “用来界面显示和处理的,对的,它们可以看作是一层。叫界面层?”
      “界面层这种叫法可以,或者叫UI层、表现层都可以。”
      “访问配置文件或处理数据库是不是就是数据层了?”
      “哈,三层架构是不是不难理解呀!说得很对,不过名称应该叫做数据访问层(Data Access Layer)或简称DAL层。”
     “那么第三个层就是那些算法类了,这叫什么层呢?”
     “这些算法是谁制定的?由谁来决定其变化?”
     “当然是需求提出者,即软件系统所有者制定的,他们要改算法,我们开发就得改。这都是他们的业务算法呀!”
     “哈,好,你说到了一个词,业务(Business)或叫商务,这其实是软件的核心,我们就是根据业务规则来开发软件提供服务的,所以这个层叫做业务逻辑层(Business Logic Layer)。不过它应该是中间的一层,介于另两者之间。”
     “哦,所谓的三层开发,就是关于表现层、业务逻辑层和数据访问层的开发。那么他们之间的关系呢?”
     “你需要知道,这其实只是大方向的分层,每个层中都有可能再细分为多个层次和结构。比如PetShop4,这是微软用它来展示.Net企业系统开发的能力的范例,PetShop尽管作为对大型软件系统开发的样例还是不够,但可以理解为儿童的智力玩具。不过对于初学编程的小菜你来说,玩具却是最好的学习道具。”

下面图源自Bruce Zhang博客



 
      “如果是要细化,可能结构就会变得很复杂。比如给你看看PetShop4的结构图。”大鸟继续说道。

       “啊,上面那图我是明白了,下面这图看得晕晕乎乎的,哪有这样复杂的玩具,大鸟又在故弄玄虚,快点解释一下?”小菜疑惑的说。
       “第一次看到就完全看明白,那不就成天才了。学习它还需要慢慢来,以后再说。你现在应该对改写商场收银系统有点数了吧,应该怎么做呢?”
       “应该原来的解决方案分为三个项目,一个UI项目,目前是WinForm的程序,一个BLL项目,用来把算法类都封装,还有一个DAL项目,用来访问配置文件。对吗?”
      “嗯,差不多了,快去改吧,口说容易,实践中会有很多细节问题等着你去解决的。”
      “好的,不过今天不行了,我前几天面试的一家公司给我Offer了,我明天就要去第一天上班,明晚我再去改写这个程序。”小菜说道。
      “恭喜恭喜,就是你之前提到了那家做物流软件的公司吗?找到工作你得请客啦。”
      “No problem,不过等我发工资吧。就是那一家。感觉公司还是很大的。”
      “那你快去休息吧,第一天要好好表现哦!”
(待续)
应一些回复朋友的要求,专门写了关于Web架构方面的文章,本篇还只是简单介绍。其实这些都不是新鲜的东西,如果你认为自己的确是小菜,我建议你去下载上一篇的代码来根据本篇的介绍去改写,编程是实践性很强的技术,理解不等于会应用的。

posted on 2007-03-26 13:22 伍迷 阅读(7421) 评论(26)  编辑 收藏 网摘 所属分类: 面向对象小菜编程成长记

评论

#1楼    回复  引用  查看    

不错,学习了
2007-03-26 13:57 | OK_008      

#2楼    回复  引用  查看    

等续集ing
2007-03-26 14:23 | white.wu      

#3楼    回复  引用    

非常好,期待下一篇
2007-03-26 15:04 | mynull [未注册用户]

#4楼    回复  引用  查看    

期待,下文!!
非常感谢!!!
2007-03-26 15:33 | 一滴水      

#5楼    回复  引用    

好文章!
真是非常感谢楼主为我们这些菜鸟提供这么好的学习文章
2007-03-26 15:37 | 菜鸟学习 [未注册用户]

#6楼    回复  引用  查看    

终于来到了三层。
2007-03-26 15:38 | 金色海洋(jyk)      

#7楼    回复  引用    

介绍的比较简单 这样的要好些http://www.cnblogs.com/fubeidong/archive/2007/03/26/688194.html
2007-03-26 17:14 | Apple [未注册用户]

#8楼 [楼主]   回复  引用  查看    

@Apple
三层架构我用一篇是讲不清楚的,这里只是简单介绍一下,后期会有相应的代码来展开,不过由于这种文章的风格,我是不太会把问题的所有细节都讲得很透,而更多是是对容易出现错误的地方提出问题和解答。

其实网上关于三层架构的好文章实在太多,你可以搜索学习。千万别指望从《小菜编程成长记》中就可以学到所有的东西,这只是一种调侃方式,是在你学累了之余看看的佐料。不能本末倒置。

不过从学习方法的角度讲,任何好东西如果只把研究结果告诉你,对于初学者是无法很好的去应用它的。原因在于开发是需要我们从无到有,从简单到复杂的过程,所以程序是如何演化出来的过程就显得非常重要。

我们看到了非常漂亮的UML图,看到了写好的大段精彩的代码,不是说它不好,但对初学者收获较小,为什么,因为这些东西如何出来的过程我们没有看到。

同样道理,比如GoF《设计模式》,非常难读懂它,初学者估计都不能坚持看完它。它不好吗?当然不是,它是最经典的设计模式著作。但为什么看不太懂呢?因为它是精华,没有过程。它更应该是给对设计模式理解得差不多的人看的工作手册。

推荐初学者去看《重构》和《重构与模式》,这两本讲到了如何学习设计模式的方法,结合的看这些经典的图书对初学者会有帮助。

哈,你给的链接是人家硕士论文,写得很详细,建议有一定基础的朋友阅读。
2007-03-26 17:46 | 伍迷      

#9楼    回复  引用    

我记得李天平写过一篇关于分层的趣味理解也挺有意思,不妨大家来共同借此宝地来探讨一下分层的理解http://www.cnblogs.com/ltp/archive/2005/12/03/289726.html
2007-03-26 20:23 | chenSir [未注册用户]

#10楼 [楼主]   回复  引用  查看    

@chenSir
这篇文章很有意思,分层本身是很抽象的东西,李天平用很具象的小笼包来比喻,就容易理解得多,我喜欢这种风格的讲解,此文很适合初者者阅读。
2007-03-26 20:28 | 伍迷      

#11楼    回复  引用    

@伍迷
多谢指教
2007-03-27 09:29 | Apple [未注册用户]

#12楼    回复  引用  查看    

MARK! studying...
2007-03-27 13:29 | Ame      

#13楼    回复  引用  查看    

学习ING。。。
2007-03-29 09:16 | leoxu      

#14楼    回复  引用  查看    

非常好!!!幽默,搞笑,易懂,真神人也,鬼神不可测也支持楼主!!
2007-06-01 01:09 | wdx2008      

#15楼    回复  引用    

楼主厉害,我喜欢
2007-06-29 15:39 | niuniu [未注册用户]

#16楼    回复  引用    

FrameCountry是采用.Net的开发平台,专注于数据库访问层功能的架构系统,为用户提供便捷、规范、强大的功能,提升开发效率。

FrameCountry特点
1. 便捷开发:封装、整合数据库操作方式,让开发人员摆脱数据库的约束;
2. 规范开发:依据多层设计原理,明晰人员分工,提高程序可读性;
3. 记录运行情况:开发人员依据记录了解系统详情,方便调试排错;
4. 多样数据库连接:实现多种数据库连接方式,对开发人员透明化数据库连接,使其只关注上层程序,同时降低数据库转换、升级工作量,目前实现Access2000、SQLServer2000两种数据库,日后逐步增加关系型数据库连接配置;
5. 整合有效函数:对开发中其它的有用的、常用的函数进行整理,简单调用实现;

访问http://blog.csdn.net/lizheng82
2007-07-04 15:06 | pwhello [未注册用户]

#17楼    回复  引用  查看    

博主,比较仔细的看完了所有文章,对于这一章的一个说法有疑问
“很多人认为MVC模式(Model-View-Controler)就是三层架构,这是比较经典的错误理解了”

MVC怎么就不是3层了呢?
V 和 表示层 不一致吗 ?
C 和 业务逻辑层 不一致吗?
M 和 数据访问层 不一致吗?

希望博主说明,谢谢
2007-08-01 10:21 | temptation      

#18楼 [楼主]   回复  引用  查看    

@temptation
理解完全错误了,MVC说来话长,建议您去搜索相关文章,它和三层是两会事。
2007-08-01 11:23 | 伍迷      

#19楼    回复  引用  查看    

@伍迷
谢谢前辈,大概明白了我的错误
MVC是web表示模式
三层是部署模式
2007-08-02 09:25 | temptation      

#20楼    回复  引用    

楼主,加油,支持你,
在这里献上崇高的敬意,
不管你有没有感受到我挚热的目光,
请你相信,
有这么一些人
一直在默默的关注着你,
期待着你
2007-09-05 17:07 | 菜鸟飞 [未注册用户]

#21楼    回复  引用    

我要飞得更高 飞得更高 :)支持!
2008-05-23 10:51 | 念 时 [未注册用户]

#22楼    回复  引用  查看    

哈哈 文章实在很好,不过就我的水平连一半的小菜都比不上,前路漫漫啊~
谢谢楼主~
2008-10-06 19:18 | 梦涯      

#23楼    回复  引用    

看了那本书,的确写得挺明了的
不过要多实践下才能真正理解。
文章写得太好了
2008-11-25 16:21 | 起点lee [未注册用户]

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-26 15:45 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: