zoukankan      html  css  js  c++  java
  • 三层架构,分层开发

     “大鸟,我们继续讨论吧!”小菜很沮丧的说。
             “小伙子,不会修收音机也是很正常的,没什么大不了的,用不着丧着一个脸。好象失恋一样,男人再强也要学会说‘不’。”大鸟安慰着说,“如果你的目标是要成为修理电器专家,那么你连收音机都不会修,那是很郁闷的事。但你现在的目标是什么?”
           “我想成为软件架构师,编程专家。”小菜毫不含糊的说。
          “就是,你的人生目标很明确,别的方面弱一些有什么关系呢。”大鸟继续说道,“现在电视节目《波士堂》里请来的嘉宾,全是中国的大企业家,许多人身家上亿,节目中都要求他们要有一个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项目,用来访问配置文件。对吗?”
          “嗯,差不多了,快去改吧,口说容易,实践中会有很多细节问题等着你去解决的。”
          “好的!"
    (待续)
    应一些回复朋友的要求,专门写了关于Web架构方面的文章,本篇还只是简单介绍。其实这些都不是新鲜的东西,如果你认为自己的确是小菜,我建议你去下载上一篇的代码来根据本篇的介绍去改写,编程是实践性很强的技术,理解不等于会应用的。
  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/fightingtong/p/3712794.html
Copyright © 2011-2022 走看看