为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET新手们的快速提高!知识都是普通的,关键是学习的思路。技术源于生活,技术原来可以这样学。抛砖引玉而已。
 层次结构在现实社会里随处可见。记得有个笑话讲有个村长得意地向他老婆吹牛:“全中国只有四个人比我官大,乡长、县长、省长和×××总理”。这个笑话也体现了真实社会中分层的现象。社会人群会分层,公司人员结构也会分层,楼房是分层的,甚至做包子的笼屉都是分层的。虽然分层的目的各有不同,但都是为解决某一问题而产生的。所以,分层架构其实是为了解决某一问题而产生的一种解决方案。

14.1.1  常用的三层架构设计

 软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。
 常见的三层架构基本包括如下几个部分,如图14-1所示。
图14-1  常见的三层架构
数据访问层DAL:用于实现与数据库的交互和访问,从数据库获取数据或保存数据到数据库的部分。
业务逻辑层BLL:业务逻辑层承上启下,用于对上下交互的数据进行逻辑处理,实现业务目标。
表示层Web:主要实现和用户的交互,接收用户请求或返回用户请求的数据结果的展现,而具体的数据处理则交给业务逻辑层和数据访问层去处理。
 日常开发的很多情况下为了复用一些共同的东西,会把一些各层都用的东西抽象出来。如我们将数据对象实体和方法分离,以便在多个层中传递,例如称为Model。一些共性的通用辅助类和工具方法,如数据校验、缓存处理、加解密处理等,为了让各个层之间复用,也单独分离出来,作为独立的模块使用,例如称为Common。
 此时,三层架构会演变为如图14-2所示的情况。
图14-2  三层架构演变结果
业务实体Model用于封装实体类数据结构,一般用于映射数据库的数据表或视图,用以描述业务中客观存在的对象。Model分离出来是为了更好地解耦,为了更好地发挥分层的作用,更好地进行复用和扩展,增强灵活性。
通用类库Common:通用的辅助工具类。
 在第5.2节中我们讲过可以将对数据库的共性操作抽象封装成数据操作类(例如DbHelperSQL),以便更好地复用和使代码简洁。数据层底层使用通用数据库操作类来访问数据库,最后完整的三层架构如图14-3所示。
图14-3  最后完整的三层架构
 数据库访问类是对ADO.NET的封装,封装了一些常用的重复的数据库操作。如微软的企业库SQLHelper.cs,动软的DBUtility/DbHelperSQL等,为DAL提供访问数据库的辅助工具类。
 通过以上分析,我们知道如今常用的三层架构是个什么样子,同时,我们也知道了三层架构在使用过程中的一些演化过程。那么,为什么要这样分层,每层结构到底又起什么作用呢?我们继续往下看。

14.1.2  趣味理解:三层架构与养猪

 看新闻报道今年猪肉价格一路高涨,据说有人养猪都发财致富奔小康了,程序员都说写代码没前途了,还不如去养猪,不过,可别认为养猪没有技术含量,比写代码容易,其实养猪也大有学问。为了更好地理解三层架构,就拿养猪来做个例子吧。俗话说:“没吃过猪肉,还没见过猪跑啊!”。
 图14-4是三层架构化的养猪产业流水线趣味对此图。
图14-4  三层结构与养猪
  对比图14-3与图14-4,我们可以看出:
数据库好比猪圈,所有的猪有序地按区域或编号,存放在不同的猪栏里。
DAL好比是屠宰场,把猪从猪圈取出来进行(处理)×××,按要求取出相应的部位(字段),或者进行归类整理(统计),形成整箱的猪肉(数据集),传送给食品加工厂(BLL)。本来这里都是同一伙人既管抓猪,又管杀猪的,后来觉得效率太低了,就让一部分人出来专管抓猪了(DBUtility),根据要求来抓取指定的猪。
BLL好比食品加工厂,将猪肉深加工成各种可以食用的食品(业务处理)。
Web好比商场,将食品包装成漂亮的可以销售的产品,展现给顾客(UI表现层)。
猪肉好比Model,无论是哪个厂(层),各个环节传递的本质都是猪肉,猪肉贯穿整个过程。
通用类库Common相当于工人使用的各种工具,为各个厂(层)提供诸如杀猪刀、绳子、剪刀、包装箱、工具车等共用的常用工具(类)。其实,每个部门本来是可以自己制作自己的工具的,但是那样会使效率比较低,而且也不专业,并且很多工作都会是重复的。因此,就专门有人开了这样的工厂来制作这些工具,提供给各个工厂,有了这样的分工,工厂就可以专心做自己的事情了。
 当然,这里只是形象的比喻,目的是为了让大家更好地理解,实际的情况在细节上会有所不同。这个例子也只是说明了从猪圈到商场的单向过程,而实际三层开发中的数据交互是双向的,可取可存。不过,据说有一种机器,把猪从这头赶进去,另一头就噗噗噜噜地出火腿肠了。如果火腿肠卖不了了,从那头再放进去,这头猪又原原本本出来了,科幻的机器吧,没想到也可以和三层结构联系上。以上只是笑谈,不过也使三层架构的基本概念更容易理解了。
 上面谈了那么多,有人会问,我直接从数据库取出内容直接操作不可以吗?为什么要这么麻烦地用三层架构呢?三层架构到底有什么好处呢?
 不分层,当然可以,就好比整个过程不分屠宰场、加工场之类的,都在同一个场所(工厂)完成所有的活(×××、加工、销售)。但为什么要加工厂和商场呢?因为当规模比较大的时候,管理起来就会变得非常复杂,这样的养殖方式已经无法满足规模化的需要了。并且,从社会的发展来看,社会分工是人类进步的表现。社会分工的优势就是让适合的人做自己擅长的事情,使平均社会劳动时间大大缩短,生产效率显著提高。能够提供优质高效劳动产品的人才能在市场竞争中获得高利润和高价值。人尽其才,物尽其用最深刻的含义就是由社会分工得出的。软件开发也一样,做小项目的时候,分不分层确实看不出什么差别,并且显得更麻烦啰嗦了。但当项目变大和变复杂时,分层就显示出它的优势来了。所以分不分层要根据项目的实际情况而定,不能一概而论。
        更多详细内容请阅读《亮剑.NET:.NET深入体验与实战精要》第14章。

职场 休闲 行业资讯

0

分享

微博 QQ 微信

收藏

上一篇:《把脉VC++》--2008十大... 下一篇:在公司里,你会是什么样的程序员?
wenjianan

116篇文章,8W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

转载于:https://blog.51cto.com/haoxia/171926

趣味理解:三层架构与养猪—《.NET深入体验与实战精要》相关推荐

  1. JavaWeb三层架构的理解/三层架构的优缺点/三层架构与MVC的区别

    1.三层架构 我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器.在JavaEE开发中,几乎全都是基于B/S架构的开发.那么在B/S架构 ...

  2. python 三层架构说明_常用的三层架构设计图解大全

    软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层.业务逻辑层.数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提 ...

  3. 有了门面,程序会更加体面!- pos软件基于三层架构 -09

    续上篇)         大鸟说道:"实际上没有学过设计模式去理解三层架构会有失偏颇的,毕竟分层是更高一级别的模式,所谓的架构模式.不过在程序中,有意识的遵循设计原则,却也可以有效的做出好的 ...

  4. C#回顾学习笔记四十:三层架构

    1)三层框架是什么? 按照书籍和博客文章里千篇一律的解释就是:UI层.BLL层.DAL层.这样的解释通常无法让人一时半会理解含义,总而言之在这里先大概说明一下三层架构.正如其他文章提到的一样,三层架构 ...

  5. 从三层架构说起,谈谈对历史项目的小改造

    项目背景说明 最近接手一个 "老" 项目的需求修改,项目整体基于 .net core 3.1 平台,以传统的三层架构为基础构建.了解需求后,逐步对原有项目框架进行大概的了解,主要是 ...

  6. 五分钟理解MVC三层架构

    一.理解MVC 最近在学习狂神的javaweb技术,将他讲解的内容整理成博客,给大家带来便利的同时也为自己记录知识,以免日后忘记. 什么是MVC:Model模型,View视图,Controller控制 ...

  7. 三层架构(我的理解及详细分析)

    三层架构已经学了一段时间,一直想做一个比较完整.比较完美的总结.但是左思右想,不知道如何下笔.都说万事开头难嘛,今天整理了一下凌乱的思路,哎,还是没整理好,想到哪就说到哪吧. 初学者很不理解: 1,什 ...

  8. MVC三层架构简单理解

    文章目录 MVC三层架构: 1.理解MVC: 2.以前的架构(只有两层): 3 MVC 三层架构: MVC三层架构: 1.理解MVC: Model view Controller 模型.视图.控制器 ...

  9. MVC与三层架构理解

    文章目录 1. JSP的发展 2. MVC思想 优缺点 3. 三层架构 为什么使用三层 三层优缺点 4. MVC与三层架构的区别 1. JSP的发展 早期只有Servlet,只能使用response输 ...

最新文章

  1. python判断 t1 树是否有与 t2 树拓扑结构完全相同的子树
  2. SAP PM 入门系列4 - 如何手工触发一个新的PM检验批?
  3. 人工智能伦理如何设定,从种群层面看人类的知识积累和进化
  4. 【转】Failed to load module for FS type ‘bdb’ in TortoiseSVN 1.6.x
  5. ES6中的异步对象Promise
  6. 浅谈Spring MVC知识
  7. 十分钟搭建和使用ELK日志分析系统
  8. CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%)
  9. 队列和消息队列_消息队列概述[幻灯片]
  10. 代码实现识别部分截图在整张图片中的位置_基于神经网络的OCR识别
  11. MT【99】2005联赛二试题我的一行解法
  12. 密钥管理系统研究(一)
  13. IDV VDI TCI RDS区别
  14. 搭建直播平台过程中的全能“辅助”——流媒体服务器...
  15. php扇形统计图怎么做,PHP实现绘制3D扇形统计图及图片缩放实例_php实例
  16. 风景照片的PS后期处理(3)
  17. 腾讯研究院夹缝中生存 35万年薪难求才
  18. MATLAB绘图合集:imagesc绘图
  19. 清华张钹院士:走向真正的人工智能
  20. Java 根据开始日期和结束日期,获取日期之间的工作日,去除了周末和法定节假日

热门文章

  1. 五.获得MYSQL数据库自动生成的主键
  2. node中的流的介绍(Stream)
  3. Java IO编程全解(五)——AIO编程
  4. HDU 1004 Let the Balloon Rise
  5. List(JDK1.7)(1)
  6. 自定义 Layer 属性的动画
  7. 两个关于.NET读取EXCEL文件的问题,记下来,很有用!
  8. python Class:获取对象类型
  9. python-字典dict、去除重复set
  10. HTTP长连接和短连接以及推送服务原理(转)