三层体系结构学习总结

 

 

三层架构学习总结
KeyWords: 三层体系结构,DAL,BLL,USL,学习心得,三层体系结构,软件三层体系结构 
By Flouse
2008年7月24日
  • 三层体系结构的概念
  1. 用户界面表示层(USL)
  2. 业务逻辑层(BLL)
  3. 数据访问层(DAL)

https://images.cnblogs.com/cnblogs_com/reeezak/aspnet_tutorial/02/aspnet_tutorial02_BusinessLogicLayer_cs_figure01.gif
图一:BLL将USL与DAL隔开了,并且加入了业务规则

  • 各层的作用
  • 1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.

    2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

    3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
  • 具体的区分方法

    1:数据数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作。而不必管其他操作。

    2:业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。

    3:表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
  • 三层结构解释

    所谓三层体系结构,是在客户端与数据库之间加入了一个中间层,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。 三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交换.

    开发人员可以将应用的商业逻辑放在中间层应用服务器上,把应用的业务逻辑与用户界面分开。在保证客户端功能的前提下,为用户提供一个简洁的界面。这意味着如果需要修改应用程序代码,只需要对中间层应用服务器进行修改,而不用修改成千上万的客户端应用程序。从而使开发人员可以专注于应用系统核心业务逻辑的分析、设计和开发,简化了应用系统的开发、更新和升级工作。
  • 那么为什么要应用“中间业务层”呢?举些例子:
        我们假设有一段登录代码,则可以这样处理Web程序,外观层负责接收前台页面的数据,然后传给中间层,中间层对数据进行处理,比如格式化,防SQL注入等等一些,这样的数据再传给数据访问层然后与数据库进行操作,比如与数据库的用户名和密码匹配等等一些代码。
  • “中间业务层”的用途有很多,例如:验证用户输入数据、缓存从数据库中读取的数据等等……但是,“中间业务层”的实际目的是将“数据访问层”的最基础的存储逻辑组合起来,形成一种业务规则。例如:“在一个购物网站中有这样的一个规则:在该网站第一次购物的用户,系统为其自动注册”。这样的业务逻辑放在中间层最合适:

 

 

在“数据访问层”中,最好不要出现任何“业务逻辑”!也就是说,要保证“数据访问层”的中的函数功能的原子性!即最小性和不可再分。“数据访问层”只管负责存储或读取数据就可以了。

  • ASP.NET中的三层结构说明

    完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层。否则你的应用是不是多层结构,或者说是层结构的划分和组织上是不是有问题就很难说.不同的应用有不同的理解,这只是一个概念的问题.
  •  
  • 理解ASP.NET中的三层结构——为什么要分三层?

    我们用三层结构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级。它未必会提升性能,因为当子程序模块未执行结束时,主程序模块只能处于等待状态。这说明将应用程序划分层次,会带来其执行速度上的一些损失。但从团队开发效率角度上来讲却可以感受到大不相同的效果。


    需要说明一下,三层结构不是.NET的专利,也不是专门用在数据库上的技术。它是一种更加普适的架构设计理念。
  • 个人感觉
  • 个人感觉此种架构要在数据库设计上注意表之间的关系,尽力满足主与子的关系。在功能上对用户要有一定的限制,不要表现在对于子表的删除操作一定要慎重,以免造成主表与子表的数据在逻辑上出现的主表的外键在子表中没有相对应的值。
  • 对于表的综合查询方法是:
    先对主表查询,调用主表所对应的DL。再根据主表的记录分别对每一个子表进行查询。将自表的查询结果添加的主表后,形成一个大的查询集合。
    对于表的操作(增删改):
    此时只对主表进行操作,调用主表对应的DL中的操作方法。
    RL层是逻辑判断层,主要是对页面上传入的数据进行逻辑判断。RL层之上就是UI

  • 如何建立一个三层体系结构解决方案

    新建一个空白解决方案。然后:     
    “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“数据访问”(数据层,下简称D层)     
    “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“业务规则”(业务层,下简称C层)     
    “添加”-“新建项目”-“其他项目”-“企业级模版项目”-“C#生成块”-“Web用户界面”(界面层,下简称U层)     
    右键点“解决方案”-“项目依赖项”,设置U依赖于D、C,C依赖于D。     
    对U添加引用D、C,对C添加引用D。     
    到此为止,一个三层的架子建立起来了。我上面说的很具体很“傻瓜”,知道的人觉得我废话,其实我这段时间很强烈的感觉到非常多的人其实对这个简单的过程完全不了解。虽然不反对建2个“空项目”和1个“Asp   net   Web应用程序项目”也可以作为3层的框架,而且相当多的人认为其实这些“企业级模板项目”其实就是个空项目,这是一个误区。没错,企业级模板项目你从解决方案资源管理器里看它是个什么也没有的,但是你可以用记事本打开项目文件,看见不同了吧??有些东西在背后,你是看不见的,不过系统已经做好了。也就是说,如果你在C层里的某个类里“using   System   Data   SqlClineit”,或者使用一个SqlConnection对象,编译时候不会出错,但是会在“任务列表”里生成一些“策略警告”,警告你在C层里不要放应该放在D层的东西(虽然就程序来说没错,但是可读性可维护性就打了折扣)而这种功能,空项目是无法給你的。
  • 在新TraceLWord3中,应用了“企业级模板项目”。把原来的LWordTask.cs,并放置到一个单一的项目里,项目名称为:AccessTask。解决方案中又新建了一个名称为:InterService的项目,该项目中包含一个LWordService.cs程序文件,它便是“中间业务层”程序。为了不重复命名,TraceLWord3的网站被放置到了WebUI项目中。更完整的代码,可以在CodePackage/TraceLWord3目录中找到——

  • 面象对象与实际的结合
  • 我们知道建桥需要砖块,应该是先准备好砖再来建桥,不过为了讲解上的顺序性和连贯性,简单性。我们先建桥,建的过程中需要砖块再现做,这样就不会多出来“桥不需要的东西”。注意在实际中,还是应该先准备砖块。

  • U层其实就是桥,C层是砖块,D层是原料(石头、沙子)。这也解释前面为什么U层要引用、依赖D层(而不是U对C,C对D的层次),因为桥除了需要砖头,其实也需要石头沙子。
  • “三层结构”的缺点
  • 有些网友在读完这篇文章前作之后,对我提出了一些质疑,这提醒我文章至此还没有提及“三层结构”的缺点。“三层结构”这个词眼似乎一直都很热门,究其原因,或许是这种开发模式应用的比较普遍。但是“三层结构”却并不是百试百灵的“万灵药”,它也存在着缺点。下面就来说说它的缺点……

  • “三层结构”开发模式的一个非常明显的缺点就是其执行速度不够快。当然这个“执行速度”是相对于非分层的应用程序来说的。从文中所给出的时序图来看,也明显的暴露了这一缺点。TraceLWord1和TraceLWord2没有分层,直接调用的ADO.NET所提供的类来获取数据。但是,TraceLWord6确要经过多次调用才能获取到数据。在子程序模块程序没有返回时,主程序模块只能处于等待状态。所以在执行速度上,留言板的版本越高,排名却越靠后。“三层结构”开发模式,不适用于对执行速度要求过于苛刻的系统,例如:在线订票,在线炒股等等……它比较擅长于商业规则容易变化的系统。

    “三层结构”开发模式,入门难度够高,难于理解和学习。这是对于初学程序设计的人来说的。以这种模式开发出来的软件,代码量通常要稍稍多一些。这往往会令初学者淹没在茫茫的代码之中。望之生畏,对其产生反感,也是可以理解的……

    其实,无论哪一种开发模式或方法,都是有利有弊的。不会存在一种“万用法”可以解决任何问题。所以“三层结构”这个词眼也不会是个例外!是否采用这个模式进行系统开发,要作出比较、权衡之后才可以。切忌滥用!

  • 参与资料
  1. MainDoc.rar   (《浅谈“三层结构”原理与用意》1.30M)      

    http://www.bincess.cn/Downloads/MainDoc.rar     
  2. petshop 4.0的体系结构(只是稍微看了一下,了解一下结构)
    简介:PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,而且有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。
    下载地址:http://msdn.microsoft.com/en-us/library/aa479070.aspx
    PetShop架构设计
    三层”应用结构:数据访问层、业务逻辑层(领域层)、表示层
    分层的设计的特点:
    结构清晰、耦合度低
    便于系统的扩展
    利于开发任务同步进行
    降低了一定的性能
    .Net   PetShop   4.0   配置文件属性管理
    http://blog.csdn.net/fengfangfang/archive/2006/09/07/1189061.aspx       

    .Net   PetShop   4.0   缓存处理       
    http://blog.csdn.net/fengfangfang/archive/2006/09/06/1185077.aspx       

    .Net   PetShop   4.0   消息处理       
    http://blog.csdn.net/fengfangfang/archive/2006/09/08/1194896.aspx       

    每个功能都使用了工厂模式  
  3. 参考了Duwamish
  4. Web Search

转载于:https://www.cnblogs.com/Flouse/archive/2008/07/24/3L.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具有全局观的网络拓扑

近年来,IT技术发展迅速,随着各个企业IT系统的建设,网络架构从单一的局域网扩展到广域网,网络设备也是类型多种多样,路由器、交换机、防火墙、IDS、***等等,而且网络设备的供应厂商也是越来越多,…

硬件_WIFIBlue

WIFI 平台:全志 模组:AP6210 (WF BT FM) 模式:STA  AP  Wi-Fi Direct(点对点) 接口:SDIO / USB——WF UART PCM——BT PCM数字音频接口,说明接口传输的音频数…

ActiveX控件的另类免费签名法

注意:一直都有人提到一个问题,就是使用支付宝的证书,会不会有安全问题,这一点是肯定的,所以这个证书只能拿来做软件签名用,不能拿来做支付的。 这几天手上在做一个项目,要用到ActiveX控件&#…

web布局最实用的12条css技巧

1&#xff1a;Rounded corners without images 效果图—— Rounded corners without images<div id”container”> <b class”rtop”> <b class”r1″></b> <b class”r2″></b> <b class”r3″></b> <b class”r4″>&l…

运算符(2)

1.三目运算符 /* 三目运算符/ public class demo1 { public static void main(String[] args) { int score 80; String type score<60?"不及格":"及格"; System.out.println(type); } } 2.运算符优先级逻辑非>逻辑与>逻辑或a||b&&c的运…

虚拟的有时比真实的还要好(+奥运杂谈)

虚拟技术十分热门.虚拟技术是将一台物理硬件计算机虚拟成多台软件计算机.每一台虚拟出来的软件计算机(以下叫做虚拟机)用起来都就象是在用那台被虚拟的硬件计算机(以下叫做真实机)完全一样.当然这样的说法忽略了虚拟机相对于真实机在执行效益上不可避免所存在的损失.所以如何减…

类型转换与键盘输入

1.自动类型装换 自动类型转换指的是容量小的数据类型可以自动装换为容量大的数据类型。如图2-6所示&#xff0c;黑色实线表示的是无数据丢失的 //容量小的可以自动向容量大的转化 //可以将整型常量赋值给byte/short/char等变量&#xff0c;而不需要强制类型转换&#xff0c;只要…

掷骰子游戏和条件语句

1.java掷骰子游戏 public class iftest {public static void main(String[] args) {System.out.println("#####掷骰子游戏#####");System.out.println("#################");//投掷三个色子看看今天手气怎么样&#xff1f;int i (int)(6*Math.random()1);…

加标签的continue用法

1.加标签的continue&#xff0c;类似于C语言的goto语句 转载于:https://www.cnblogs.com/ma1998/p/11444868.html

英国Carmarthen Learning Centre校长Mr Stuart来华访问,与荣新IT培训中心达成教学合作关系...

英国Carmarthen Learning Centre校长Mr Stuart来华访问&#xff0c;与荣新IT培训中心达成教学合作关系 2008年9月4日&#xff0c;英国Carmarthen Learning Centre校长Mr Stuart来华访问。Carmarthen Learning Centre所处于英国伦敦&#xff0c;是一家英国著名的培训学校&#x…

Service Broker实现发布-订阅(Publish-Subscribe)框架

Service Broker实现发布-订阅&#xff08;Publish-Subscribe&#xff09;框架Service Broker 实现一套完整的发布-订阅方案&#xff0c;其中author 发送Service Broker Message&#xff08;又称article&#xff09;到发布者&#xff08;Publisher&#xff09;。发布者负责分发消…

你所应该知道的云计算

感觉像是云计算的一个推崇者&#xff0c;为云计算在做广告&#xff0c;Robyn Peterson的文章What you need to know about cloud computing。 云计算可以保证我们不再受硬件的困扰&#xff0c;真的是这样吗&#xff1f; 在为一个小型商业或者大型企业构建IT结构的时候&#xff…

递归算法

一、递归的核心思想就是自己调用自己&#xff0c;一般来说能够用递归解决的问题应满足3个条件&#xff1a; 1.需要解决的问题可以转化为一个或多个子问题来求解&#xff0c;而这些子问题的求解方法与原问题完全相同&#xff0c;只是在数量和规模上不同。 2.递归调用的次数必须是…

二项式公式

取 即得 转载于:https://www.cnblogs.com/zeenzhou/p/11462928.html

tomcat 部署 React 项目后,浏览器刷新报404问题

问题&#xff1a;tomcat部署了react前端项目&#xff0c;可以正常访问&#xff0c;但是页面刷新就报404 一、问题截图 二、解决办法 在tomcat 配置文件web.xml中配置如下代码&#xff1a; web.xml 路径&#xff1a; apache-tomcat-8.5\conf\web.xml <error-page><erro…

美国国家地理

美国国家地理图 (19) National Geographic, 夏威夷 上帝的花园, Hawaii, 19 garden-of-the-gods-90667-lw.jpg (148.7 KB)2008-7-9 09:27 AM上帝的花园 Garden of the Gods, Hawaii, 1996National Geographic Photo Of the DayPhotograph by Jim RichardsonA time-exposed phot…

微软独立虚拟机Hyper-V Server 2008

微软9月底如约发布了独立虚拟机操作系统Hyper-V Server 2008&#xff0c;并提供免费下载和使用&#xff0c;用户无需支付40美元即可获得来自微软的虚拟化方案。与之前集成在Windows Server 2008里的Hyper-V模块/插件不同&#xff0c;Hyper-V Server 2008是一个独立的服务器操作…

js的正则处理

1.search()方法&#xff0c;返回首次出现位置&#xff0c;如果找不到匹配则返回-1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> …

于elasticsearch-rest-high-level-client 操作 Es

安装Java&#xff1a;要求JDK为1.8及以上版本。创建阿里云Elasticsearch实例&#xff1a;实例版本要求大于等于elasticsearch-rest-high-level-client的版本。本文创建一个6.3.2版本的实例。 注意 High Level Client能够向上兼容&#xff0c;例如6.3.2版本的elasticsearch-rest…

序列图

序列图主要用于按照交互发生的一系列顺序&#xff0c;显示对象之间的这些交互。很象类图&#xff0c;开发者一般认为序列图只对他们有意义。然而&#xff0c;一个组织的业务人员会发现&#xff0c;序列图显示不同的业务对象如何交互&#xff0c;对于交流当前业务如何进行很有用…