巧妙传值,为队友减负

不管是采用七层,或是沿用三层,层与层之间的工作划分都有很强的次序。既然划分好了层级,规定好了各层各自的任务,那就去尊重,照章实现就好了。各层不仅要履行好自身的职责,能在自身职责的基础上,再发放些福利,那不仅程序做得Beautiful,合作也会Beautiful!

直面问题。举例说明一下:

在“机房收费系统”的上机业务实现中,界面层(UI层)接收用户输入的上机所需的必要信息,封装成实体(Model),传给业务层(BLL层)。业务层在处理的过程中,需要做如下这些判断:①A=“基本数据是否设定”②B=“用户是否存在”③C=“卡是否可用”④D=“余额是否充足”⑤E=“是否已经在线” 。

从上面的5个判断,看出,每一个都只需返回一个Boolean,而且每一个Boolean都是独立的“True”或者“False”。在不满足时,为了能将明确的信息回馈给用户,明确问题,以方便用户的调整,最快地为用户提供实现。一次只能调用一个,做一个判断,有一个返回值。这个判断在BLL层进行过一遍,等传给UI层又得对返回值进行再次判断,才能得出结果。如果就这么来,那么UI完成的工作跟BLL所做处理相差不大,还徒增过程的一次调用和判断。这在任何“懒”的程序猿面前,都是难以忍受滴。

上面的这5条判断,都必须去判断一遍,全部满足后,“上机”才能走通。所以关于对它们的判断谁先谁后,在全部满足(多数)的情况下是没有差别的,所以先不考虑。

在BLL层将这些判断进行查询和处理,并集中判断。此处如果用设计模式,可用装饰模式进行。

装饰模式:objec = judgeFunction(objec)

B =judgeFunction(A)

C =judgeFunction(B)

D =judgeFunction(C)

E =judgeFunction(D)

如果深加分析,可以考虑,将易发生“不满足”的判断放在前面,如果不满足,立即返回,不用进行后面的其他判断,当然会有提升性能。

只在形式上进行划分,在实质上,不仅没有带来便利,反而变得繁琐。那只会被嗤之以鼻,遭受唾弃。

时间: 2024-08-25 07:27:52

巧妙传值,为队友减负的相关文章

java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有限的. 这和c++中内存分配差不多(c++中还要有另一种方式用于全

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中. 在这里,我们将它稍加推广,泛指一切生成并返回一个对象的静态函数. 一个经典的工厂方法如同这样: Sprite* factoryMethod() { Sprite* ret = new Sprite(); //在这里对 ret

循环数组最大子段和(动态规划思想的巧妙转换)

个人心得:这是一道好题,线性的最大字段和在动态规划中是司空见惯的.所以对于这种动态规划的思想的巧妙转变也是需要 锻炼的,就像在暑假集训里面碰到的从1到k是递增,k到n是递减的k使得此时的和最大,当时也是毫无办法,虽然后面 想到了分别将首尾展开然后分别求递增的最大和,题目就迎刃而解了.其实这一题题目的分解还是很明白的, 最大值无非就是线性动态规划和横跨俩端的子段,横跨俩端的子段最简单就是俩层循环很明显超时了,后面想着从左边找到最大 的并标志,但是很明显俩段最大值不一定是在一段最大值的前提下,所以后

个人项目:中小学数学卷子自动生成程序-队友代码测评

结对编程-队友代码分析 上一周,我们完成了个人项目编程.在经过对队友代码的分析,我感触颇深,觉得非常有必要来写一篇文章分析一下队友的代码,我是用的java,而队友用的c++,以下开始正文! ------------------------------------------------------------------------------- 项目需求简述: 个人项目:中小学数学卷子自动生成程序 用户: 小学.初中和高中数学老师. 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序

中小学数学卷子自动生成程序-结对编程之队友代码分析

一.编程语言:C++ 二.代码解读与分析: 1. 项目逻辑 通过输入信息与数组中存储账户信息比对完成用户登录.根据不同的类型要求生成相应类型的试卷并查重.将生成题目以指定的形式存放在指定文件夹下.过程中可切换试卷类型. 2.函数功能说明 int main():主函数负责调用各个功能函数,将各个功能模块按照项目实际的使用情况与应用逻辑结合适当的提示性信息进行组织和套用. void SetPrimary(int n):生成小学类型的试卷. void SetMiddle(int n):生成初中类型的试

React + Node.JS 巧妙实现后台管理系统の各种小技巧(前后端)

目前因学业任务比较重,没有好好的完善,现在比较完善的只有题库管理,新增题库,修改题库以及登录的功能,但搭配小程序使用,主体功能已经实现了 此后台系统是为了搭配我的另一个项目 School-Partners学习伴侣微信小程序而开发的.是一个采用Taro多端框架开发的跨平台的小程序.感兴趣的可以看一下之前的文章 这篇文章主要是分享一下在开发这个东东的时候,遇到的一些问题,以及一些技术的巧妙的方法分享给大家,如果对大家有帮助的话,请给我点赞一下给个star鼓励一下~无比感谢嘿嘿 希望大佬们走过路过可以

JS 传值 传址

在JS中,有两种不同的方式可以操作数据的值,这两种技术分别叫做 传值 和 传址. 传值:在赋值过程中,首先对值进行了一份拷贝,而后将这份拷贝存储到一个变量.对象属性或数组元素中.拷贝的值和原始的值是完全独立.互不影响的.当一份数据通过值传递给一个函数,实际上被传递的不是数据本身,而是数据的一份拷贝.因此,如果函数修改了这个值,影响到的只是数据的那份拷贝,而并不影响数据本身. 传址:在赋值过程中,变量实际上存储的是数据的地址(对数据的引用),而不是原始数据或者是数据的拷贝.如果值通过一个地址发生了

Swift代理和传值

第一个视图控制器: import UIKit // 遵循协议 class ViewController: UIViewController,SecondVCDelegate { override func viewDidLoad() { super.viewDidLoad() // 创建一个button let button1 = UIButton(frame: CGRectMake(120, 120, 50, 50)) // 修改背景颜色 button1.backgroundColor = U