机房收费重构——关于面向对象和分层的纠结

机房收费重构——关于面向对象和分层的纠结

      机房收费系统的重构已经開始非常久了,近期两天才感到有了一点儿头绪。


      对这次重构,刚開始计划的是先做数据库,然后优化下,列出每一个窗口对表的訪问关系,抽出经常使用的訪问作为存储过程,然后把訪问数据库的经常用法封装成SqlHelper.这部分就是数据库的部分。


     然后就是软件的结构:总体上是分了七层:三层+实体+外观+抽象工厂+D层接口。尽管计划的非常好,可是在详细分层这里想了非常久。


    最先是对D层開始下手的。D层是什么?是对表的訪问,将对数据库的读取和写入都封装成D层的类,那么,类又依照什么分呢?后来想了想曾经学习三层的时候做的7层的登陆窗口,那个时候,D层是依据表来的,将訪问每张表的方法总综合写成一个类。


     在纠结中,顺便进行着考试系统的測试,中间夹着这学习了非常多东西,感觉还是挺充实的,尤其是看了十几集的牛腩视频,给了我非常多启示。最终在一个周六,画了一天类图,让看到了自己纠结非常久的成果了:


    对于D层:基本是依照表来,将表抽象出一个类或者几个类,在每一个类里面,尽量让全部的方法去訪问表中同样的字段,也就是说,尽管D层主要依照表来,可是也用功能去辅助分类,比方,对于訪问两张表的情况,就将这种方法依据功能放在相似与他功能实现上有联系的类中。


   做完D层之后,向上到了接口层,才发现慘了,事实上我应该先做接口的。由于D层是用来实现接口层的,而不是接口层依据D层出现的。也就是说,编程要面向接口。唉,当时怎么就没想起来呢?


     接着做的是实体层,实体层是做什么的呢?先想想我们曾经程序中是怎样传递数据的:我们比方,我们注冊一个学生,这个学生可能写到学生信息表里面有十几条字段值要写进去,传递过程中在程序内部写这么多的值是非常easy丢掉一两个的,有了实体层,我们能够非常好的发挥封装的作用,将全部数据打包传递,就像给你寄个快递一样,不管多大还是多小,都给你打个包,不至于丢失什么东西。


   对于抽象工厂,延续抽象工厂+反射+配置文件的高大上的做法,返回接口,后来写代码的时候,发现修改起来果然很easy,当我修改D层的时候,上面的东西根本不用动。


   接着是B层,对于B层,它接收从U层过来的数据,向下送到D层进行处理,并将D层返回的数据放在这里进行推断和处理,并将结果返回给U层。可是它是怎样进行分类的,这个问题想了好久。看大家博客和当面交流,大家都大致是这样做的:1,依照U层窗口来;2,依照用例来;。。。。事实上我是比較看好依照用例来的,由于假设U层有非常多窗口的话,会造成B层类过多。可是依照用例来也是有问题的,假设我添加�功能,就要去修改类。好像怎么着都不完美。后来,想到设计模式上说的一句话:不论什么需求的变动都是须要成本的。我认为如今这个阶段我还是选择一种方法做下去比較好,假设实现的过程中,发现了更好的方法,能够再去修改。


    对于外观层,是对B层的进一步抽象,这次做到最后的时候,去掉了外观层,由于感觉这个系统太小了,B层的抽象程度已经相当高了,加了外观层就是冗余 了。


   这样,仅仅剩下最后的U层,它仅仅用来实现主要的输入输出就能够了。

   解耦完成~~~~


  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119143.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月15日 下午3:00
下一篇 2021年11月15日 下午4:00


相关推荐

  • QDir类及其用法总结

    QDir类及其用法总结简介 QDir 类提供了访问系统目录结构及其内容的与平台无关的方式 头文件 include qdir h QDir 类用来操作路径名及底层文件系统 获取关于目录路径及文件的相关信息 也可以用来获取 Qt 资源系统的文件信息 QDir 类使用相对或绝对文件路径来指向一个文件 目录 绝对路径是从目录分隔符 或者带有一个驱动器标识 除了在 Unix 下 如果总是使用 作为目 qdir h

    2026年3月19日
    2
  • Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符解决方法[通俗易懂]

    Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符解决方法[通俗易懂]对于这个问题,对于我这种初学者来说是经常遇到的,今天就把可靠的解决发法记于此,希望能帮助到大家。ORA-12154:TNS:无法解析指定的连接标识符第一步:查看自己的Oracle服务是否打开。OracleDBConsoleORCL是Oracle网页端管理工具的服务,访问地址一般为“http://127.0.0.1:1158/em/console/logon/logon”,如果不习惯用…

    2022年7月19日
    19
  • ipynb pycharm 运行_在pychar中写入ipynb文件,PyCharm,编写

    ipynb pycharm 运行_在pychar中写入ipynb文件,PyCharm,编写背景我的 Pycharm 下面有很多 Project 每个 Project 一个 Anaconda 环境 昨天新开了一个 Project 叫 CLRS Code Anaconda 环境名也叫 CLRS Code 然后我之前没有在 Pycharm 里面用过 Jupyter 突然想试试这个功能 然后就新建一个 ipynb 文件 Pycharm 提示我没有装 JupyterPacka 然后我就在 Pycharm 里面装了 装完之后 搜索

    2026年3月17日
    2
  • 【小5聊】C#基础之Response.ContentType响应内容类型[通俗易懂]

    【小5聊】C#基础之Response.ContentType响应内容类型[通俗易懂]Response.ContentType1、文本格式:html、xml、txtResponse.ContentType=”text/html”;Response.ContentType=”text/xml”;Response.ContentType=”text/plain”;2、图片格式Response.ContentType=”image/jpg”;…

    2022年7月19日
    31
  • 切比雪夫不等式

    切比雪夫不等式切比雪夫不等式假设随机变量 XX 的期望 mu 和方差 sigma 都存在 对于任意正数 0 epsilon0 都有 P x 2 2P x mu epsilon le frac sigma 2 epsilon 2 从不等式本身的意义来看 它用随机变量的期望与方差给出了长尾概率的范围 例如 对于正态分布 X N 0 X simN

    2026年3月20日
    2
  • OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)OpenCV 与图像处理学习七 传统图像分割之阈值法 固定阈值 自适应阈值 大津阈值 一 固定阈值图像分割 1 1 直方图双峰法 1 2OpenCV 中的固定阈值分割二 自适应阈值图像分割三 迭代法阈值分割四 Otsu 大津阈值法前面的笔记介绍了一些 OpenCV 基本的图像处理 后面将学习使用 OpenCV 的传统的图像分割方法 这次笔记的内容是阈值法进行图像分割 图像分割是指将图像分成若干具有相似性质的区域的过程 主要有基于阈值 基于区域 基于边缘 基于聚类 基于图论和基于深度学习的图像分割方法等 图像分割分为语

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号