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

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

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


      对这次重构,刚開始计划的是先做数据库,然后优化下,列出每一个窗口对表的訪问关系,抽出经常使用的訪问作为存储过程,然后把訪问数据库的经常用法封装成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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • jQuery仿阿里云购买选择购买时间长度

    效果:http://hovertree.com/texiao/jquery/61/jQuery仿阿里云购买服务器选择时间长度,操作简单,只需点击所要选的时间段代码:转自:http://hover

    2021年12月22日
  • 【CUDA】cuda安装 (windows版)[通俗易懂]

    【CUDA】cuda安装 (windows版)[通俗易懂]【CUDA】cuda安装(windows版)前言官方教程安装工具的准备CUDAtoolkitDownloadcuDNNDownload2.CUDA安装与配置过程测试环境是否安装成功2、cuDNN配置运行官方自带的demo前言windows10版本安装CUDA,首先需要下载两个安装包CUDAtoolkit(toolkit就是指工具包)cuDNN官方教程CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-mic

    2022年6月7日
  • activiti工作流框架_springboot工作流框架

    activiti工作流框架_springboot工作流框架工作流Activiti是一个项目的名称,Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家TomBaeyens担任。Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,…

    2022年9月1日
  • getchar用法[通俗易懂]

    getchar用法[通俗易懂]getchar用法1.从缓冲区读走一个字符,相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误 3. getchar()是在输入缓冲区顺序读入一个字符(包括空…

    2022年10月19日
  • ZTE E700 自用感受及软件推荐

    ZTE E700 自用感受及软件推荐ZTEE700自用感受及软件推荐声明声明:此帖是转的  前两天看到移动08年新出的承诺话费换手机业务,换了个折扣最高的ZTEE700,首先声明我用的手机并不是很多,所以说错了希望大家见谅。这个机器我非常满意,非常好用!质量没得说,我从手里掉到水泥地上机器翻了3个跟头拿起来一点问题都没有。内置功能很强大,不过扩展功能则比较残废,好在机器本身的功能就能满足90%以上人的需求了,游戏…

    2022年7月11日
  • 论物联网与大数据、云计算、工业物联网、区块链「建议收藏」

    论物联网与大数据、云计算、工业物联网、区块链「建议收藏」论物联网与大数据、云计算、工业物联网、区块链我们当今的时代飞速发展,物联网、大数据、云计算这些名词在我们的生活中出现的越来越频繁,看似高大上的三者其实却和我们的生活息息相关。本篇文章就物联网、大数据以及云计算对三者之间的关系以及应用进行描述。工业物联网和区块链也进行了介绍。(一)物联网(1)什么是物联网物联网(InternetofThings,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、连接、互动的物体或过程,采

    2022年9月26日

发表回复

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

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