目录
前言
分包
主界面
添加页面
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然后将数据放到新数组中,再返回
在查看页中拿到数据后我们就遍历数组将里面的数据打印给用户就可以了
总结
分包后可以使我们的代码看起来逻辑更加清晰,同样功能的代码都放在同一个包里,以后维护和修改起来也会更加方便