再看外观和B层

     机房重构时候,用到了外观,但是在用外观的时候基本上业务逻辑层没有在体现出它本身的功能,而是将
 业务逻辑基本转移到了外观层中,也没想太多直接就那么敲完了重构;不过在合作的时候我们达成了一致,让
 外观发挥外观的功能,B层发挥业务逻辑的功能,在此之前需要弄清楚以下两个概念:
   一、什么是外观?
     在设计模式中我们学习过外观模式,都知道外观是为子系统中的一组接口提供一个一致的界面,很多人也
   见过下面的图片
	
     这张图生动形象的表明了外观的作用,可以为U层提供很清楚的接口,非常方便
     但是我们在具体做机房的时候会无意识的把外观的作用曲解,我们先接着往下看
  二、业务逻辑层(B层)
     什么是业务逻辑?业务逻辑是对数据业务逻辑的处理;乍一听是对业务的逻辑,但具体是什么呢?
     业务逻辑的内容包括一下几方面:
	1.领域实体:业务中的对象,包括属性和行为;
	2.业务规则:规定完成一个动作需要满足的条件;
	3.数据完整性:一些必不可少的数据;
	4.工作流:实体之间的交互关系;
     看起来还是很模糊的概念,不太明白,举个例子说,就那机房登录来说吧
	1.领域实体:用户名,密码
	2.业务规则:点击登录会登陆系统,但必须在用户名和密码都输入正确的情况下才能登录进入系统
	3.数据完整性:用户登录需要有登录的用户名和密码,没有则不能登入系统
	4.工作流:输入正确帐号密码—>点击登录—>提示成功—>进入系统
     这才算是业务逻辑层,而我们写的业务逻辑层是什么?只是返回一个值,完全被我们架空了
		
  三、转移
     重构的时候我们外观似乎是发挥了业务逻辑层的作用,数据完整性,业务规则体现的淋淋尽致,还有不可
   或缺的工作流,现在已经意识到这个问题的存在,接下来就是要解决这个问题,转移,让他们各自发挥自己
   的责任
     外观:是对B层一些类进行汇集,为U层提供一个清除的界面,让U层和B层更好的解耦
     B层:把本该属于B层的业务逻辑从外观拿回来,充分发挥B层的作用
     敬请期待下一篇关于具体解决业务逻辑转移的问题
  小结:团队合作中大家会有很多不一致的想法,当我们在表达自己的观点或是在听别人的观点的时候是一个
        很好学习的过程,通过我们思想的交流和碰撞,对知识的理解更加深刻



时间: 2024-10-20 19:48:34

再看外观和B层的相关文章

回头再看N层架构(图解)

不知不觉来博客园已经快两半了,时间过的真快. 这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构. 一.先来看一看传统的N层架构 N-层架构的出现,主要是由于观注点的分离而产生,这三层中BL层的职责一般比较难理清,具体请看下图. 接下来我们关注一下层间交互(分离出角色与职责以后,如何交互将成为架构或模式的主要特征) 然而在实际项目中我们也会出现这样的状况 这里存在一个反模式 二.传统的N层架构与DDD中N层架构的关系 三.分层架构的一个重要原则是:每层只能与位于其下方的层发生耦

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

再看属性查找

再看属性查找 结合python继承的实现原理+元类重新看属性的查找应该是什么样子呢??? 属性查找的原则:对象->类->父类 切记:父类 不是 元类 在学习完元类后,其实我们用class自定义的类也全都是对象(包括object类本身也是元类type的 一个实例,可以用type(object)查看), 我们学习过继承的实现原理,如果把类当成对象去看,将下述继承应该说成是:对象StanfordTeacher继承对象Foo,对象Foo继承对象Bar,对象Bar继承对象object class Mym

再看GS线程

再看GS线程 void GameServer::ProcessThreadTry() { int nCount = 0; packet rcvPkt; rcvPkt.data = new char[1024 * 100]; //该事件工厂主要创建了两个定时器1.livemgr的检测(即是否是有效的连接)2.道具帮会差异更新数据的获取即定时从道具帮会容器中获取差异需要保存到数据库的这个数据 //3.释放队列的处理,现在玩家下线不是直接把channel删除掉而是放到释放队列中等没有数据库访问时在删除

再看数据库——(2)视图

概念 *是从用户使用数据库的观点来说的. *从一个或多个表(视图)中导出来的 *一个虚表,或者说查询表 为什么要用视图呢? 一是简单,看到的就是需要的.视图不仅可以简化用户对数据的理解,也可以简化他们的操作.那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件. 二是 安全,通过视图用户只能查询和修改他们所能见到的数据,但不能授权到数据库特定行和特定的列上.通过视图,用户可以被限制在数据的不同子集上:使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后

再看ftp上传文件

前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在本地测试程序上传到ftp服务器一点问题都没有,奇怪的是当发布Web和ftp到同一个IIS下,上传文件时程序直接卡死,然后页面卡死,后来我又发现把Web和ftp分开发布在两台机器上问题又得到解决,所以当时放弃了这个方案. 再看ftp上传文件 前几天偶然看到Wolfy写到一个项目总结,其中提到了用Ser

2015第43周六再看长征

今天从网上看到习大大推荐看的十三本书信息,然后先听了里面的长征,然后再看了<长征>电视,把思绪带回了70多年前,也更真切的感受到长征的重要意义.截取里面的几个事件分析下自己的感受: 1.李德博古专权导致了第五次反围剿和湘江战役的惨败,尤其是血染湘江的悲壮场景,红军从8w多损失到了3w多,多少革命战士英勇牺牲.这里有几个问题(1)为什么李德博古会专政,其它人会让他们专政?他们是共产国际派来的,代表苏联成功经验,受过正规军事训练,代表理论文化先进,所以被推崇.(2)为什么会有这两次的惨败.血流成河

再看Ajax

再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- 1.1 必备知识点 1.2 send()方法 1.3  再看CORS --2.HTTP请求和响应---------------- 2.1 Request Header中的参数 2.2 Response Header中的参数 2.3 GET请求和POST请求的区别 --3.jQuery中的Ajax-

再看GS接包过程

再看GS接包过程 bool GameServer::ProcessLoop(packet& rPkt) { if(false == m_spDataLayer->Recv(rPkt)) return true;//没数据了 if(rPkt.is_data) { if(!rPkt.data) return false; GameChannel* pGC = m_vecChannel[rPkt.channel_id]; if(pGC) pGC->OnReceiveData(rPkt.dat