[TOC]

3 项目结构

经过前面一系列学习,差不多对Java的开发过程有了一定的了解,为了能保持一个良好的项目结构,考虑到接下来要进行开发,还需要学习一下Java的项目结构

下面以两个项目结构为参照

图1

图2

第一个是我自己学习时的Demo,一边学一边建文件,应该有些错误的地方,第二张是从网上看到的一个结构比较清晰的图片

图1的结构完整一点,就以图1为主一点点讲起

3.1 src

因为我用的是Maven,大方向上项目两大文件夹分别是src和target,以及一个pom.xml配置文件,src目录里是项目工程的源码文件,配置文件和资源文件等,其下一级是main和test这两个文件夹

3.1.1 main

main文件夹下是主要的工程源文件,然后下面又是两个文件夹:java和resources,其实上面也讲了,而且顾名思义,java里面是源码文件,resources里面是资源文件

3.1.1.1 java

这之下的文件结构可以参考上面的图2了,大体上就是model-mapper-service-controller,其他还有公共类和表现层等,这里在下面单独分一个章节来说

3.1.1.2 resources

资源文件夹默认就是这个样子,application.properties是用来填写各种配置的,比如数据库连接的配置信息、日志组件的配置信息等,有些人会改成yml后缀名,里面的格式就不尽相同了,在前面也讲过,这里就不再赘述。

除此之外,各种组件的配置文件也在这个文件夹下

还有一个主要的作用是存放静态文件资源,包括需要访问的jsp、html、css、js、图片等,还有代码模板

  1. 项目配置文件:resources/application.yml
  2. 静态资源目录:resources/static/
        ——用于存放html、css、js、图片等资源
  3. 视图模板目录:resources/templates/
        ——用于存放jsp、thymeleaf等模板文件
  4. mybatis映射文件:resources/mapper/(mybatis项目)
  5. mybatis配置文件:resources/mapper/config/(mybatis项目)

3.1.2 test

如题所述,单元测试用的

3.2 target

target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等

target里的所有内容都是maven构建的时候生成的

jar 包就是 java archive file java 的一种文档格式。jar文件非常类似zip

WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:
通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。

通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便

target里的所有内容都是maven构建的时候生成的

4 Java的工程文件结构

传统的三层不用再解释了,在Java里对应数据访问层的是DAO,进行数据交互,对应业务逻辑层的是Service层,这里写逻辑代码,然后就是UI层

4.1 几种对象的解释

上面提到DAO,这里简单说说一些相关的简写,在一些源码里看到了,初学时有点懵

  1. PO(persistant object): 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。实体
  2. VO(value object):值对象,通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。可能就是Get/Set?
  3. DAO(Data Access Object):数据访问对象,用于访问数据库,里面包含对数据库的各种操作,配合VO进行CRUD
  4. DTO(Data Transfer Object):数据传输对象,是一组需要跨进程或网络边界传输的聚合数据的简单容器。它不应该包含业务逻辑,并将其行为限制为诸如内部一致性检查和基本验证之类的活动。我一开始以为是业务实体,但是看说明不是一个东西,那个是BO。

DTO的用法:
比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。DTO还有减少请求的次数、简化传输对象、避免代码重复等作用。
5. ORM(O/R Mapping,Object Relational Mapping):对象关系映射

4.2 实际的项目文件应该如何设计

可以参考图2

  1. bean也就是实体了,对应数据库的字段
  2. DAO,前面也说过了,不过里面写法可以细分很多种,使用Mybatis就是Mapper接口文件或者是xml的写法,如果还使用了JPA,还会有个repository类文件
  3. Service,这块好像写法的争议比较多,可以看看这篇文章有多少人在滥用 service+serviceImpl,又有多少人在误用myBatis
    我在很多地方都看到了一个ServiceImpl接口,一个service类的写法,一直不理解为什么要多次一举,但还是照着做了,上面那篇文章里说到这是一种过时的写法,使用接口文件是为了解决可能连接各种数据库而有多个数据访问层的问题,这样只需要实现对应的结构就行了,而有了Mybatis之后这种问题就不存在了,所以不需要再写impl接口文件,使用 service+dao+mapper.xml 是一种更好的选择
  4. Controller,这里只讨论MVC了,普通java web的写法还不会,然后从controller应该就直接到资源文件里的HTML页面了
  5. 上面是按顺序自下而上的,除此之外一些公共层:工具类库(utils)、配置类(config)、数据传输对象(dto)、视图包装对象(vo)

还可以看看这篇spring boot 项目开发常用目录结构

Java开发学习心得(三):项目结构的更多相关文章

  1. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  2. Java开发学习心得(二):Mybatis和Url路由

    目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...

  3. Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类

    一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...

  4. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  5. [翻译]现代java开发指南 第三部分

    现代java开发指南 第三部分 第三部分:Web开发 第一部分,第二部分,第三部分 =========================== 欢迎来到现代 Java 开发指南第三部分.在第一部分中,我们 ...

  6. 《Java开发学习大纲文档》V7.0

    <Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...

  7. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  8. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  9. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

随机推荐

  1. java代码之美(8)---guava字符串工具

    guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给 ...

  2. CentOS 7 安装 JAVA环境(JDK 1.8)

    1.打开url选择jdk1.8下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  3. WinSocket同时接入量的疑惑(求解...)

    在写TCP应用的时候一般都通过Accept来接入连接的接入,但对于Socket来说这个Accept同时能处理多大的量一般都没有明确说明,在应用中主要根据自己的需要设置Listen的队列数量.那List ...

  4. centos7默认防火墙firewalld

    1.开关 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disable firewalld ...

  5. java开发知识IO知识之输入输出流以及文件

    目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...

  6. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  7. MaxCompute在高德大数据上的应用

    2019年1月18日,由阿里巴巴 MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,高德数据技术专家苗翌辰为大家分享了高德如何 ...

  8. 服务化改造实践 | 如何在 Dubbo 中支持 REST

    什么是 REST REST 是 Roy Thomas Fielding [[1]](#fn1) 在 2000 年他的博士论文 [[2]](#fn2) “架构风格以及基于网络的软件架构设计” 中提出来的 ...

  9. Git合并不同url的项目

    本文由云+社区发表 作者:工程师小熊 摘要:为了让项目能实现Git+Gerrit+Jenkin的持续集成,我们把项目从Git上迁移到了Gerrit上,发现有的同事在老Git提交代码,因为Gerrit做 ...

  10. Perl获取主机名、用户、组、网络信息

    获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...