再谈三层架构(传参数、返回值)

摘要:
比如,层与层之间传递参数的问题、各层向上的返回值问题。三层架构规定了三层之间是通过传递Model(实体)参数来进行交流的。返回值其实与上边是同一个问题,之前可能为了便于与控件绑定,在D层就返回DataTable或DateSet这既违背了面向对象的思想,也背离了三层架构的设计思想。这些都背离了三层架构的设计思想。

运用分层的思想来做东西,设计时往往没问题,但如果不是很熟悉它的思想,往往会在编码时不知不觉地破坏了它的设计架构,导致编码与设计不符。比如,层与层之间传递参数的问题(用实体还是简单数据类型)、各层向上的返回值问题(用实体对象还是DataTable、DataSet)。报表绑定要注意什么。

下面就这几个问题(三层为例)进行讨论,核心思想是项目开发(编码)一定要符合项目设计。

传参数

如果采用三层架构来做项目,那么我们必须时刻围绕面向对象思想“三层架构”这个体系来编码,即要符合各层之间的引用关系。不能破坏它的架构体系(即不能破坏设计的各层之间的关系)。

三层架构规定了三层之间是通过传递Model(实体)参数来进行交流的。这个架构中,外观上看,只有这四个包中类下的对象(简单的数据类型封装在对象内部),不存在其它的任何东西,所以说层与层之间的参数传递必须通过实体对象来完成。如果用简单的数据类型(传递实体类的某个属性)就破坏了三层架构的体系(体系中不存在那个东西)。

传递实体,符合面向对象封装的原则,信息隐藏在类中,后期还便于扩展与维护。

当然如果设计不是分层的话,平时的传递参数时,传实体与一般数据类型各有利弊。

再谈三层架构(传参数、返回值)第1张

返回值

其实与上边是同一个问题,之前可能为了便于与控件绑定,在D层就返回DataTable或DateSet

这既违背了面向对象的思想,也背离了三层架构的设计思想。

首先与上面同理,三层架构中只有四个包(UI、BLL、DAL、Model)中类下的对象(简单的数据类型封装在对象内部),不存在其它的任何东西,所以层与层之间不能通过DataTable或DateSet来交流;那样的话B层和U层也都会用到DataTable或DateSet,也就是说B层和U层已经直接和数据库有了关系。这些都背离了三层架构的设计思想。

其次,返回DataTable或DateSet的话就会使得实体(Model)层没有了用。这本身就是实体该干的事。正确的做法应该将返回的东西封装在实体中,然后返回实体对象在实现各层之间的交流。

报表绑定

我们用到报表时都习惯直接将数据库表绑定到VS报表,这样的话,我们必须要给出设计说明,因为这已经不符合我们上面设计的三层。而是用的U层与数据库直接交互,就可以如下画图另行说明:

再谈三层架构(传参数、返回值)第2张

总结:分层思想强烈要求面向对象,如果一个项目绝大部分适合用某一个设计(例:上面的三层),而一小部分用另一个设计(例:上面的报表绑定)比较好,就可以同时采用这两种设计,但一定要对那一小部分采用的设计给出说明。即,任何情况下,项目开发(编码)一定要符合项目设计。

免责声明:文章转载自《再谈三层架构(传参数、返回值)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据FI常用BAPI(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UNIX网络编程——关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有 区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是<0:出错,=0:连接关闭,>0接收到数据大小,特别:返回 值<0时并且(errno==EINTR||errno==EWOULDBLOCK||errno==EAGAIN)的情况 下认为连接是正常的,继续接收。只是阻...

基于Redis的Spring cache 缓存介绍

Cache API及默认提供的实现 Spring提供的核心Cache接口:  package org.springframework.cache; public interface Cache { String getName(); //缓存的名字 Object getNativeCache(); //得到底层使用的缓...

利用Dapper ORM搭建三层架构

利用Dapper关系对象映射器写的简单的三层架构。Dapper:StackOverFlow在使用的一个微型的ORM,框架整体效率较高,轻量级的ORM框架。网上有较多的扩展。此处只是简单的调用Dapper中的方法。UI层: Dapper.Console:一个简单的控制台程序。 BLL业务逻辑层: Dapper.IBLL:业务逻辑层的抽象接口。 Dapper...

深入MVC模式概念

      学习了老赵的WebCast第一讲ASP.NET MVC框架开发系列课程---MVC模式与ASP.NET MVC框架概述. 对MVC模式有更深入的理解. 一、MVC概述 1.MVC模式是上世纪70年代由Trygve Reenskau提出,运用于Smalltalk平台上. 2.表现模式(UI/Presentation Pattern). 3.三种...

RxJava入门

项目小版本上线,抽空简单学习了下久仰大名的RxJava 一、引入 个人觉得rxjava的特点: 强大灵活的事件流处理(多线程/多事件/复合对象) 强大灵活优雅简洁的异步 链式调用 可自动Lambda化   实现:RxJava 是通过一种扩展的观察者模式来实现的 类比 类比 实际 实际 职责 演讲者 Button (可)被订阅者 (同右)...

Makefile所有内嵌函数

一、文本处理函数以下是GNU make内嵌的文本(字符串)处理函数。1       $(subst FROM,TO,TEXT)函数名称:字符串替换函数—subst。函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”。返回值:替换后的新字符串。示例:$(subst ee,EE,feet on the street)替换“feet on the s...