浅谈三层与实体

如果说类实现了封装,那么三层又将相关的类进行了封装,把它们封装在三个类库中。因为类的存在,减少了类与类之间的耦合;因为三层的存在,减少了职责不同的类之间的耦合。

所以三层的目的和面向对象的思想是一致的,就是要实现高内聚,低耦合,便于代码的更改,复用,即提高代码的灵活性,可维护性,复用性。还有一点很重要,就是安全。

我想看这篇文章的人至少对三层有一点点了解。一定知道三层包括:UI(User Interface Layer)表示层,BLL(Business Logic Layer)业务逻辑层,DAL(Data Access Layer)数据访问层。顾名思义,UI和用户紧密联系,DAL和数据库紧密联系,而BLL联系着二者。但是UI有时也想攀攀好久不联系的远房亲戚——DB(数据库),冒昧的拜访很不礼貌,中间总得有人给牵线搭桥。红楼梦中,刘姥姥想拜见王夫人,就事先和周瑞家的打了个招呼,而王夫人也没直接和刘姥姥见面,就派王熙凤去接待她。所以这里面,刘姥姥就是UI,周瑞家的就是BLL,王熙凤就是DAL,王夫人就是DB。可能不太恰当,但是三层确实也体现着一定的等级观念,UI层只能引用(访问)BLL层,BLL层只能访问DAL层,不能越级访问,而BLL和DAL又都很势利,他们却无暇顾及比自己低的层,所以BLL不能引用UI,DAL也不能引用BLL和UI。

那么,三层中为什么“等级观念”这么强?我们先看看假如他们处在一个平等的社会会怎样。

首先,从表面看,负责不同功能的代码可以互相访问,那么就相当于可以直接互相调用每个层里的函数,表面上看是分层了,实际依然是“一锅粥”,又回到了之前把那些用于显示的,逻辑判断的,访问数据库的代码都放到了一起。违背了“单一职责”,可读性差,更改维护起来不容易,不利于面向对象思想的体现。

其次,不管谁修改代码,都能看到有关访问数据库的代码,这样访问数据库的代码就很容易被修改,那么安全性怎么体现?

最后,如果软件发布了,安装到了不同的客户机上,但是突然需要更换数据库,那么每台机子上的代码就都得修改,要不就只能重新发布,重新安装了。

所以,虽然我们的人类社会需要平等,但是在三层中我们却要等级明显,这样会提高部署,开发,维护的效率,并节省相应的费用。

明确了这些之后,我们就要在实践中保证每一层各司其职。

UI,就是接受用户输入的数据,并显示BLL层传来的一些结果。

BLL,负责对数据的业务处理,它得处理用户的请求或返回一定结果。

DAL,负责访问数据库的数据,可能也会在本地缓存一些数据库的数据。

说完三层后,最后谈谈实体。

如果说BLL是UI和DAL之间的信使(邮递员),那么实体就是信。用户输入的信息不会直接让BLL看到,而是写到了信中,BLL拿到的只是装有信的信封。如果这封信就是写给BLL的,当然BLL可以拆开信封看里面的信。如果这封信最终是要到DAL手里的,那么邮递员BLL就没必要看了,而是把它交给DAL。如果DAL回信了,它也是通过邮递员把信最后交到UI手里。

我们先来看UI层的一段代码:

我们看到,这段代码并没有向我上述所说把用户输入的信息封装到“信”(实体对象user)中,而是直接作为函数参数传给BLL,我们不提倡这种做法,如果参数增多,每个牵连到的函数都得修改参数个数。不利于更改。这段代码有一点好处是把BLL传回来的信息封装在了信中,因为图中代码显示,把BLL层的函数的返回值赋给了user。

再来看下面这段代码,感觉会好很多。

这里就是把用户输入的信息都封装在了enuser这个实体中。

总结:三层之间访问遵循一定原则,上层只能调用相邻的下一层,访问方式是通过调用下一层提供给它的接口函数,而数据则是通过实体来传递。三层之间好像是有条明线,又有条暗线一样。函数调用是你能看得见的明线,而数据的都封装在了实体当中,但是它却在三层之间穿梭,好像是条暗线一样。

浅谈三层与实体

时间: 2024-10-11 04:24:24

浅谈三层与实体的相关文章

浅谈三层架构(2)

感受: 对于三层的学习,自己刚开始的感觉真的是一头雾水啊,当时真的出现了很烦躁的感觉,我想这种感觉的出现真的是很可怕的,就这样耽误了两天,在网上也搜寻者自己想要的资料,昨天四姐也好心给调试了一番,顿时把自己的大脑打通了,其实问题难不难,就在于能不能打开思路了! VB.NET的三层实现: 上篇文章主要是对于三层有了一个表面的理解,下面针对机房收费登陆界面来进行一下简单的理解: UI层主要就是表面的构建,多以需要使用windows窗体来完成,而其他BLL和DAL则不需要,之间建立一个类库则可以完成自

浅谈三层模式

总觉的对三层的理解很肤浅,这几天看了相关的资料,无非谈的就是概括和基本组建附加个小例子!看完了,感觉说的大同小异,自己的理解好像也没什么多大变化,只不过加深了点罢了.不过想想有几天在这方面的思考,还是总结一下吧! 你去饭店吃饭,就遇见了三层,咱们唠唠吃饭这事! 服务员的作用就是给你上菜,收集你的信息,比如来个鱼香肉丝,或是几瓶啤酒,烤串什么的!总之你的一切请求都只是面向服务员的!至于厨师是男的,女的,负责给厨师买材料的采购员,你是没必要知道的.一切为了顾客,就是服务员的宗旨!等哪天这个服务员辞职

重构机房收费系统—浅谈三层

重构机房基本完成了,期间三层重构完了,推翻之后,再重构七层(外观和工厂),再重构,来来回回用了一个月........ 重构机房从画图画到一半就废弃了,因为对三层不熟,之后,做完了,才敢重新拾起来画.画图先从包图开始,宏观上有个了解: (一)重构机房包图: 先前画包图的时候,跟师傅交流,结果被一个师姐给笑话了,因为我认为:它们各个层之间都是双向箭头的,后来才知道,箭头表示调用关系,B层只能被U层或外观调用,B层不能调用U层,所以不存在双向箭头,大家注意. 在我这次重构中是严格按照上面的图中来的.

浅谈“三层架构”

今天我们来谈谈三层和传说中的"七层". 三层:(先看图)             首先,我觉得学习三层并不太难,体现在三方面:认识不难.理解不难.它所展现的内容不难. "认识三层",网上随便一搜"软件的三层架构"云云,各种文章眼花缭乱.简单说三层就是指"表现层UI.业务逻辑层BLL和数据访问层DAL".表现层主要处理用户与界面的关系,业务逻辑层当然是主要处理业务逻辑,数据访问层就是处理有关数据库的系列操作,比如增删改查等. 其

浅谈三层架构(1)

这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接 我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节.废话不多说,开始上源码 void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector&

浅谈三层

三层大家都知道了,各种生活化的例子也就不再向大家举了.这里说说我对三层的理解. 三层: 所谓三层体系结构,是在客户端与数据库之间加入了一个"中间层",也叫组件层.这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上. 三层究竟有哪三层: 表现层(User Interface).业务逻辑层((Business Logic Layer).数据访问层((Data Access

浅谈三层架构

三层架构并不是MVC,MVC是一个很早就有的经典的程序设计模式,M-V-C分为三层,M(Model)-V(View)-C(Control).而web开发中的三层架构是指:数据访问层(DAL-DatabaseAccessLayer),业务逻辑层(BLL-BusinessLoginLayer),以及用户界面层(UI-UserInterface,实际就是网页后台的具体调用BLL层).这个是基本概念.曾经我以为三层架构就是在AppCode中,分为三个大类与若干小类,各司其职.在经过一番洗礼后,才发觉多么

浅谈三层中Model的作用

以前总是对三层中的Model概念不是很理解,今天早上查了一下,豁然开朗...... 怎么说呢,应该是面向对象编程吧.当我们在表单提交的时候,表单中的数据基本上是和数据库表中的字段相对应, 有时候,在提交表单的时候会有很多的参数传过来,当然你也可以一个一个根据name获取值,但是这样很麻烦,那么model 就产生了,其实model它就是一个类型,这个类型可以包含许多的int.string等等的类型,你可以通过代码生成器根据数据库 中的表生成Model,也可以手写,你在后台表单获取的时候,直接在方法

Core Data浅谈系列之十 : 关于数据模型中实体的属性

之前写了<Core Data浅谈系列汇总>,今天稍微回顾了下,做些补充. 在这个系列的第一篇<基础结构>中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型.布尔值统一用NSNumber来表示: 字符串类型用NSString表示: 时间类型用NSDate表示: 二进制数据类型用NSData表示: 非标准类型用Transformable来表示: 而Attribute还有其自身的Properties,比如Transient表示不用持久化