Delphi 三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:
表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。 区分层次的目的即为了“高内聚,低耦合”的思想。
概念简介
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
 
概述
数据访问层、业务逻辑层(又或称为领域层)、表示层。
 
三层结构原理:
       3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。
       所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。
这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
 
各层的作用
1:数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
 
优点
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间
缺点
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
规则
三层结构的程序不是说把项目分成DAL,BLL,WebUI三个模块就叫三层了,下面几个问题在你的项目里面:
⒈ UILayer里面只有少量(或者没有)SQL语句或者存储过程调用,并且这些语句保证不会修改数据?
⒉ 如果把UILayer拿掉,你的项目还能在Interface/API的层次上提供所有功能吗?
⒊ 你的DAL可以移植到其他类似环境的项目吗?
⒋ 三个模块,可以分别运行于不同的服务器吗?
如果不是所有答案都为YES,那么你的项目还不能算是严格意义上的三层程序. 三层程序有一些需要约定遵守的规则:
⒈ 最关键的,UI层只能作为一个外壳,不能包含任何BizLogic的处理过程
⒉ 设计时应该从BLL出发,而不是UI出发. BLL层在API上应该实现所有BizLogic,以面向对象的方式
⒊ 不管数据层是一个简单的SqlHelper也好,还是带有Mapping过的Classes也好,应该在一定的抽象程度上做到系统无关
⒋ 不管使用COM+(Enterprise Service),还是Remoting,还是WebService之类的远程对象技术,不管部署的时候是不是真的分别部署到不同的服务器上,最起码在设计的时候要做这样的考虑,更远的,还得考虑多台服务器通过负载均衡作集群
所以考虑一个项目是不是应该应用三层/多层设计时,先得考虑下是不是真的需要? 实际上大部分程序就开个WebApplication就足够了,完全没必要作的这么复杂. 而多层结构,是用于解决真正复杂的项目需求的。
 
与MVC的区别
MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。
同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。
在三层架构中没有定义Controller的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
 

 

更多相关文章
  • 北京商报讯(记者 马元月 叶龙招)金利科技(002464)携重组方案自7月28日复牌至今已连续收获5个涨停,这也让停牌前进入的资金获益颇丰.北京商报记者注意到,在该股停牌筹划重组前5个交易日里,中信信托旗下的一只信托计划就精准增持了金利科技.金利科技是在今年1月27日停牌筹划重大事项的,而根据该公司 ...
  • 简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键词: Mocha, Mocha Debug with Chrome, Debug Mocha tes ...
  •   摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 眼看到年底了,接到猎头的电话有点多. 那问题来了: 一. 到底什么时候跳槽比较合适, 二. 跳槽到底有哪些坑? 三. 离职的时候跟boss如何谈判? 四. 离职的时候需要办理那些手续? 五. 除了BAT之外,还有那些一线城 ...
  • 看过<超能陆战队>的朋友可能仍然对于电影中的男主角介绍和演示自己发明的微型机器人的场景记忆犹新. “它”看起来只是一跟带有磁性的小小的金属部件.但是它是一个独立的个体,自己能够独立的大脑,同时,和同伴之间有相互的接口你行链接.能够通讯.能够随意的组合成任意功能的物体. 通过类比,我们很容 ...
  • Exchange 2013部署系列之(七) 配置SSL多域名证书 前面六篇博客我们详细讲解了Exchange Server 2013的部署和配置,Exchange一些服务,如 Outlook 无处不在和 ActiveSync,要求在 Exchange 2013 服务器上配置证书. 本篇讲解如何配置来 ...
  •  很久以前就看到了Burp suite这个工具了,当时感觉好NB,但全英文的用起来很是蛋疼,网上也没找到什么教程,就把这事给忘了.今天准备开始好好 学习 这个渗透神器,也正好给大家分享下.(注:内容大部分是 百度 的,我只是分享下自已的学习过程) 什么是 BurpSuite Burp Suite 是 ...
一周排行
  • Public Class Form1 Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVa ...
  • 马克·扎克伯格 Facebook创始人及CEO
  • 为什么极品飞车等等游戏,都可以通过系统设置很方面地根据自己喜欢设置操作方式,有人喜欢用箭头来控制没有喜欢用用"W,S,A,D"来控制,这就说明了程序员不会把控制方式写死在程序里面,来看看Unity ...
  • std::complex 复数可以很方便的做旋转 以下为实现: //待旋转的点坐标 (fRotationX,fRotationY) //中心点坐标 (fCenterX, fCenterY) //旋转角度 void R ...
  • Problem Description Xinlv wrote some sequences on the paper a long time ago, they might be arithmetic or geo ...
  • 1.c++中继承有公有继承,保护继承,私有继承     定义个基类:     #include<iostream>     using namespace std;     class Base     ...
  • 以暴制暴,并不能解决问题.杀死一帮恶人,又会有新的一帮恶人出现. 那么干外国人?这一批洋人杀了,又会有另一批洋人进来. 自强不息,让洋人不敢来侵袭. 这似乎是最优解.   可是国人强大了,赶走了洋人,又会不会陷入内战 ...
  • http://lite-ext.googlecode.com/svn/trunk/lite-ext/playground/vertical-center/image-center.html
  • protected string GetDiffTime(DateTime beginTime, DateTime endTime) { string strResout = "{0}{1}前"; ...
  •   读过Silverlight Unleashed,知道在Silverlight.js里有Silverlight.createObject和Silverlight.createObjectEx函数.使用这两个函数而不 ...