刚刚开始接触三层的时候,我只做了两个登录小窗体的例子。画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西)。不过,欠下的总要还的。在做机房重构的时候,问题出现了。如果只用三层+实体,我能做出来,但是,要求重构不能只用三层+实体,那么,就要好好分析一下了。

首先说说三层+实体:就是表现层(U层)直接调用业务逻辑层(B层)的逻辑,业务逻辑层在直接访问数据层(D层),在把数据返回到B层后返回到U层。首先,只用三层+实体做程序时,灵活性不够高。如果想换数据库的话,需要大量改动B层的代码。其次,代码利用率不高,像访问数据库的一些代码,多次重复。

既然不好,就有必要寻找新的方法。B层直接访问D层不好,怎么办呢?用接口。这样,如果更换数据库,只要把D层进行修改或者在连接新的D层,而不用更改B层的代码了,实现“高内聚,低耦合”。U层直接访问B层,U层需要知道B层的就太多了,耦合性太高。我们的系统简单,一个上机窗体里面就两个主要功能,但是一个窗体上面内容多的话,那U层和B层的对应关系不是很乱了么?这时外观就出动了。如果U层通过外观访问B层的话,可以避免这一问题。

那么,又为什么要使用SQLHelper呢?其实,SQLHelper是一个工具,主要是为了规范代码和减少代码编写,如果想了解更多,可以参看另一篇博客:SQLHelper

下面是我画的由三层+实体到三层+实体+外观+接口+工厂+SQLHelper的包图,欢迎指正

小结:首先,无论在学什么知识的时候,即使很简单,也要小结几句,否则下次想用时,无从下手,三层就是个活例子。其次,多请教,多交流,对于不会的东西,勤于动手,等待是解决不了问题的。再次,对于三层这块,只要通了,感觉就好多了,刚刚开始做包图的时候,真的是无从下手,即使给你现成的图,也会有看不懂以及为什么会是这个样子的疑问(我相信不止我自己有这种感觉)。我建议,如果出现这种情况,先放一放图,试着通过代码,了解一下这个过程,虽然可能有点难度,但是总比停下来或者揪住一点不放要好的多。

PS:欢迎指正,不胜感激!

版权声明:本文为博主原创文章,未经博主允许不得转载。

机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)的更多相关文章

  1. 机房重构——UML图最终版本

    刚开始画图时确实很纠结,那时候是在师父的逼迫下不得不画,不过这样也是有好处的,在师父的强烈要求下,我学会了如何使用EA,也对一个学习一个新的软件有了一个更好的方法,可以去找一些视频,或者文字资料来帮助 ...

  2. .NET重构(九):机房重构验收总结

    导读:机房收费系统个人重构版,在寒假前,已经结束了.嗯,这一路的过程,也挺心酸的.结合师傅验收时的指导.建议,对这一段时间的学习,进行一个总结. 一.学习过程 这一阶段的学习,按照师傅给的建议是:由浅 ...

  3. UML从需求到实现----包图

    上接:UML中图出现顺序 上回讲到用例图,UML中各个图之间的关系.接着根据UML建模中图出现的顺序来总结包图. 用例图确定以后.用户的需求基本上就确定了.接下来要根据用户的要求去设计系统.建模的顺序 ...

  4. UML 结构图之包图 总结

    [注] 本文不是包图的基础教程, 只是包图的图形总结. 学习UML图形 推荐阅读<UML参考手册>第2版. http://www.umlchina.com/ 推荐微软的开发软件设计模型 h ...

  5. UML对象图和包图

    UML九已经介绍过的基本图,然后,我们再来看看对象图和包图.  一.对象图 谈到对象.我们不得不说一下对象.对象(Object)是对象类的实例(Instance),用于模型化特定的实体.对象是唯一的. ...

  6. 机房重构所遇问题&quot;未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件&quot;的解决的方法集锦

    敲七层登录的时候.忽然间认为敲三层搞清的思路瞬间又凌乱了.花了一天的时间边敲边梳理,最终整完了,执行的时候弹出了这种错误:未能载入文件或程序集"DAL"或它的某一个依赖项. 系统找 ...

  7. UML 用例图、顺序图、状态图、类图、包图、协作图、流程图

    ​用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...

  8. UML之包图

    包图是UML中用类似于文件夹的符号表示的模型元素的组合,系统中的每个元素都只能为一个包所有,一个包可嵌套在另一个包中,使用包图可将相关元素归入一个系统,一个包中包含附属包.图表或单个元素.简单的来说, ...

  9. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

随机推荐

  1. Berland National Library

    题目链接:http://codeforces.com/problemset/problem/567/B 题目描述: Berland National Library has recently been ...

  2. bzoj 1588 bst

    用set存下就好了. /************************************************************** Problem: 1588 User: BLADE ...

  3. 1.0 docker介绍

    简介: 一种虚拟化的方案 将应用程序自动部署到容器   特点: 轻量 环境的一直性 提高开发生命周期 使用面向服务的架构   场景: 开发.测试.部署 创建隔离的运行环境 集群测试环境 云计算应用   ...

  4. typeof的用法

    typeof可以返回变量的类型,返回值为字符串,其值有 "undefined" "boolean" "string" "numbe ...

  5. Centos_Lvm expand capacity without restarting CentOS

    Rescan the new disk(/dev/sdb): #ls /sys/class/scsi_host/ host0 host1 host2 [root@db210_13:56:14 /dat ...

  6. Python的数值和字符串

    Python数据类型 1.数值 --类型:  1/整型 2/长整型   3/浮点型 -- 0.0, 12.0, -18.8, 3e+7等 4/复数型 -- complex  In []: 0x34al ...

  7. openstack前期准备

    . 两台虚拟机,安装Centos7系统 两个网卡 -- 一个NAT模式,一个仅主机模式 两个硬盘 -- 一个20GB,一个50GB 内存 -- 主 .6GB(根据自己的配置,大于2G即可) 从 1.6 ...

  8. expose a port on a living Docker container

    if you have a container that with something running on its port 8000, you can run wget http://contai ...

  9. FineReport——JS二次开发(局部刷新)

    在FR中,可以通过在form表单设置多个报表模板,然后通过对某一模板刷新实现局部刷新的功能,在cpt模板中,由于只存在一个模板,所以无法实现局部刷新. 其实,最好的局部刷新办法是自定义一个页面,然后添 ...

  10. Redis -- 数据类型小结

    redis key 的命名规则: 对象类型:对象id:对象属性  (hset car:1: price 500.hset car:1: name:tom) 一.redis 数据类型: 1. 字符串类型 ...