JAVA基础:运用分包思想编写汽车管理系统

目录

前言

分包

主界面

添加页面

service层

domain层

查看界面

总结


前言

在编写Java业务的时候我们应该充分运用分包思想将不同功能的类放在不同的包里,如果我们将所有的类都放在同一个包中,以后维护起来也会很麻烦。我们今天就要用这种思想编写一个汽车管理系统,系统能添加汽车信息和查看汽车信息

分包

根据不同的功能我们可以将包分为:view(视图层),service(业务层),domain(实体层),util(工具层)

view:用来存放各种界面相关的代码

service:用来存放具体的业务代码

domain:用来存放实体类

util:目前用不到主要是存放各种封装好的工具类

主界面

首先text类作为我们的测试类,唯一的功能就是作为代码的入口进入汽车管理系统的主界面,主界面是一个界面所以应该放在视图层里,因此我们需要定义一个类

mainview类的作用就是系统的主页,在我们平时进入一个系统时通常会让你选择操作再进入更深一层的页面,所以主界面的作用就是通过用户的选择来跳转不同的界面,在这里我们使用switch在实现这个功能,通过输入语句来提示用户要进行的操作,然后再通过switch语句来进行不同的分支判断

在日常生活中当用户输入了一个非法数字时通常会提示用户然后再让用户重新输入,switch语句中我们可以利用default来实现这个功能,当提示用户之后应该让用户重新输入,就是要将代码跳转到第13行,因为这是个重复的操作所以我们要用到循环

当用户进行选择后应该跳转到不同的界面,所以我们还需要一个添加页面,而我们想在主页面里使用添加页面就需要添加页面的对象,而在创建对象之前我们需要先有一个类,所以我们需要再定义一个类

添加页面

同理因为这是个页面所以我们要将添加页面类定义再视图层中

在生活中当我们进入一个系统的添加页面后我们需要录入各种信息再让系统保存,所以我们需要在这个页面中让用户录入各种信息,当用户录入完毕信息后我们需要思考,保存信息的代码应该在这里编写吗?答案是false。这个类只是用来展示添加界面的,我们不应该将业务代码编写在这里,我们需要一个专门编写各种业务的类。

那么问题来了:这个专门编写业务的代码应该放在那个层里?

就是业务层service

service层

我们需要将保存数据的代码打包成一个方法,在添加页我们只需要调用方法即可

首先我身为一个执行保存数据操作的方法我需要你给我你要添加的数据,那么添加数据之后你需要我给你返回什么吗?其实在这里返回还是不返回都可以,如果想返回可以给用户返回一个boolean值。

那么我拿到了添加页传给我的数据,但是数据是分散的不好保存,既然你录入的是汽车的数据那我就可以定义一个汽车类,将数据打包成一个汽车对象,将数据打包成对象后我们需要思考用什么来储存数据,当我们要储存多个数据时就要用到数组,而考虑到封装思想和数据的安全性我们要将数组定义成private,同时因为我们这个系统里所有的汽车数据都要存到这个数组中,而且这个系统可能有很多人使用,这些人可能会new很多的对象,所以我们要用static修饰数组,因为静态的属性是属于类的并且被所有的对象共享

我们还需要一个index用来记录数组中数据的个数,当我们以后要取数据时没有index会很麻烦,因为数组的长度不代表里面数据的数量,这个index也需要和数组一样被所有的对象共享,所有也要被static修饰

domain层

在刚才我们提到了需要封装一个汽车类那么这个汽车类就需要创建在domain层这个包里的类都是这种实体类

查看界面

在主页中还有个查看功能同理,当用户输入2时我们需要调用查看页,因此我们需要查看页对象,要有对象就要有类,这个类我们也定义在视图层

当我们进入查看界面后首先是一个提示信息然后我们要思考,我们需要给用户展示所有的数据,但是数据存在什么地方?数据都在service类里的数组里,所有我们需要向service要数据

而从service的角度和封装的角度思考,service是实现所有业务的类,他存储着所有的数据,他应该考虑到有一天会有人来向他要这些数据,所以service应该对外提供提供数组的方法

但是我们不能直接把数组给返回出去

第一:如果我们直接return数组那么外界就拿到了service里数组的地址值会造成数据安全问题

第二:数组的长度为5,那里面就一定是五个数据吗?我身为用户向service要数组后难道还要我自己筛选数据吗?

所以我们定义一个新的数组新数组的长度就是刚好表示数据个数的index然后将数据放到新数组中,再返回 

在查看页中拿到数据后我们就遍历数组将里面的数据打印给用户就可以了

总结

分包后可以使我们的代码看起来逻辑更加清晰,同样功能的代码都放在同一个包里,以后维护和修改起来也会更加方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1484079.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用

摘要 随着前端开发技术的不断进步,组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践,深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中&#xff0…

【杰理蓝牙开发】AC695x 按键 I/O key 互推接法接口分析

本文主要记录 杰理蓝牙AC695x 按键I/O key 互推接法接口分析 【杰理蓝牙开发】AC695x 按键 I/O key 互推接法接口分析 0. 个人简介 && 授权须知1. IOKEY 使用硬件设计1.1 一个按键接一个 IO1.1 一个按键接两个 IO2. IOKEY 【互推】接法原理分析2.1 定义按键的三个属性2…

味蕾盛宴:红酒的丰富口感与不同的风味

在繁华的都市中,总有那么一些瞬间,我们希望用味蕾去探寻世界的美好。而红酒,便是这场味蕾盛宴中的一位优雅舞者,以其丰富的口感和不同的风味,为我们带来一场视觉与味觉的双重享受。今天,就让我们一起走进红…

Python环境下的JD京东平台商品SKU数据批量采集分析

本教程内容旨在帮助没有基础的同学快速掌握 numpy 的常用功能,保证日常绝大多数场景的使用。可作为机器学习或深度学习的先修课程,也可作为快速备查手册。 值得一提的是,深度学习的各大框架很多 API 和 numpy 也是一脉相承的哦,可…

Qt第十二章 样式表

样式表 文章目录 样式表1.样式表盒子模型 2.选择器选择器类型伪状态选择器Pseudo-State 3.控件示例4继承自QWidget的类,设置qss样式表没有效果,需要重写paintEvent 1.样式表 盒子模型 2.选择器 样式表语法,选择器{属性1:值;属性2:值;}如果只…

链表(4) ----跳表

跳表(Skip List)是一种随机化的数据结构,用于替代平衡树(如 AVL 树或红黑树)。它是基于多层链表的,每一层都是上一层的子集。跳表可以提供与平衡树相似的搜索性能,即在最坏情况下,搜…

「AI得贤招聘官」通过首批“AI产业创新场景应用案例”评估

近日,上海近屿智能科技有限公司的「AI得贤招聘官」,经过工业和信息化部工业文化发展中心数字科技中心的严格评估,荣获首批“AI产业创新场景应用案例”。 据官方介绍,为积极推进通用人工智能产业高质量发展,围绕人工智能…

springboot 实体类加注解校验入参数据

导入的是springboot自身的依赖包 import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid;

lua 游戏架构 之 SceneLoad场景加载(二)

设计上 定义 NormalSceneLoad的类,该类继承自BaseSceneLoad。 lua 游戏架构 之 SceneLoad场景加载(一)-CSDN博客文章浏览阅读48次。设计一个为BaseSceneLoad class,用于处理场景加载的相关操作 ,主要作用是提供了一个…

Unity免费领7月开发者周冰雪世界着色器环境包180种冰材质544种预制变体冰天雪地环境效果限时免费领取20240719

7月19号的Unity开发者周限时免费资产更新啦,这次是冰雪材质和环境素材包,质量挺不错。 之前进过捆绑包, 结帐时输入NATUREMANUFACTURE2024优惠券代码即可免费获得。无需购买。 Unity免费领7月开发者周冰雪世界着色器环境包180种冰材质544种…

ubuntu上模拟串口通信

前言 有时候写了一些串口相关的程序,需要调试的时候,又没有硬件,或者需要等其他模块完成才能一起联调。这样搭建环境费时费力,很多问题等到最后联调才发现就已经很晚了。 本文提供一种在ubuntu环境下模拟串口,直接就可…

Python for循环

1.基础格式 for 变量名 in range(数字):循环语句 其中,数字指的是变量名的取值,默认情况下每次循环加一。通常情况下变量名为i。使用break结束当前循环。 例: for i in range(10):print(i) 运行后应会看到输出0到9(如下&…

边缘设备使用记录--阿加犀AIBox 6490

边缘设备使用记录--阿加犀AIBox 6490 设备介绍设备连接glog && gflagsonnx2tfliteAidLite SDK for C模型输入输出的shape执行推断 OpenCV使用 设备介绍 阿加犀AIBox 6490是一款基于高通QCS6490平台的高性价比智能边缘计算终端,具有14TOPS AI算力&#xff0…

【机器学习】使用Python的dlib库实现人脸识别技术

🔥 个人主页:空白诗 文章目录 一、引言二、传统人脸识别技术1. 基于几何特征的方法2. 基于模板匹配的方法3. 基于统计学习的方法 三、深度学习在脸识别中的应用1. 卷积神经网络(CNN)2. FaceNet和ArcFace 四、使用Python和dlib库实…

有了这5个高效视频剪辑工具,你一定会爱上剪辑

如果你是个剪辑新手,不知道如何挑选剪辑视频的工具,又或者是自己目前使用的剪辑工具不理想,想寻找新的剪辑软件;那就请你看看这篇文章,这里介绍的5款剪辑软件都是专业,简单,又高效的剪辑工具。 …

算法日记day 12(栈实现队列|队列实现栈|有效的括号)

队列是先进先出的,就像排队一样,谁在前谁先获得服务 栈是一种先进后出的数据结构 一、用栈实现队列 题目: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)&#xf…

mac docker no space left on device

mac 上 docker 拉取镜像报错 Error response from daemon: write /var/lib/docker/tmp/docker-export-3995807640/b8464f52498789c4ebbc063d508f04e8d2586567fbffa475e3cd9afd3c5a7cf2/layer.tar: no space left on device解决: 增加 docker 虚拟磁盘大小。如下图

笔记 | 算法时间复杂度T(n)的计算方法

👻 基本思想:找出关键语句总执行次数 T 与 输入规模 n 的关系式 (本博客仅提供一种解题思路与通用方法,具体问题请具体分析) 👻 类型:while循环 🚀 思路 找出不满足while条件时&…

fine BI 怎么制作桑基图

fine BI 怎么制作桑吉图 文章目录 fine BI 怎么制作桑吉图桑基图起源什么是桑基图一、数据二、导入帆软 BI三、组件并完成四、 外国桑基图资源(sankeydiagram)总结 桑基图起源 桑基图的起源可以追溯到1898年,‌当时Matthew Henry Phineas Ri…

《昇思25天学习打卡营第22天|生成式-Diffusion扩散模型》

Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…