![cover](/upload/软件架构与应用开发.jpg)
软件架构与应用开发:作业 01
软件架构与应用开发: 实验一
代码地址:Github
实验目的和要求
- 初步熟悉Spring Boot开发环境搭建
- 熟悉Maven项目
- 熟悉Spring Boot的开发环境
- 第一个Spring Boot项目
- Spring Boot 项目结构分析
实验内容和原理
-
搭建并测试运行环境, 将正确安装插件的环境截图显示出来
-
根据PPT中的 Maven 项目内容,创建 Maven 工程, 将代码和运行结果截图复制到下面空白处
-
编写第一个 SpringBoot Web项目
-
对第一个 SpringBoot 项目的文件结构进行说明
主要仪器设备及工具或开发设计软件及工具名称
- 笔记本或台式机
- Eclipse+Spring开发套件 、IntelliJ IDEA、Visual Studio Code等一种开发工具
实验步骤
新建工程项目 Experiment01, 参数设置如下:
注意这里的 SpringBoot 版本请选择 3.0.0 以下, 亲测目前新版本很多插件存在适配问题
在 pom.xml 中重新使用 Maven 加载项目
由于 pom.xml 中部分依赖在 Maven 中并没有初始化成功, 因此要重新加载项目
![image-20230302223212648]( https://owen-resource.oss-cn-hangzhou.aliyuncs.com/images/image-20230302223212648.png)
配置 application.yml
- 将 application.properties 更名为 application.yml
配置 datasource:
spring:
datasource:
username: root
password: 12345678
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoder=utf-8&useSSL=true&serverTimeZone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
注意这里的 datasource 为 mysql 8.0.30-arm64, 根据自己实际情况进行配置
启动 Experiment01Application
正常启动输出如下:
新建静态测试网页
-
在 ‘src/main/resources/static’ 下新建 index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>这是测试的 HTML </div> </body> </html>
-
重启 SpringBoot 项目, 登录默认端口查看网页
项目目录 (阿里巴巴版)
通用目录
- 项目根目录/src/main/java:放置项目 Java 源代码
- 项目根目录/src/main/resources:放置项目静态资源和配置文件
- 项目根目录/src/test/java:放置项目测试用例代码
Java 源代码
大致框架
而位于/src/main/java目录下的 Java 源代码的组织结构大家比较关心,这地方也只能给出一个通常典型的结构,毕竟不同项目和团队实践不一样,稍许有区别,但整体安排应该差不多。而且如果是多模块 的项目的话,下面的结构应该只对应其中一个模块,其他模块的代码组织也大致差不多。
![image-20230302231028648]( https://owen-resource.oss-cn-hangzhou.aliyuncs.com/images/image-20230302231028648.png)
目录说明
|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|__consist:存放常量定义
|__enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|__entity:放置数据库实体对象定义
|__dto:存放数据传输对象定义
|__vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|__intf:存放业务逻辑接口定义
|__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码
难点
当然,这地方估计有一个很多人都会纠结的关于DTO/VO/DO 等数据模型定义的区分。这在《阿里巴巴Java开发手册》中倒是做了一个所谓的严格区分,那本书上是这样去定义的:
- DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
- DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
- AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
- Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
资源目录
大致架构
/src/main/resources 目录,里面主要存放静态配置文件和页面静态资源等东西
目录说明
|_mapper:存放mybatis的XML映射文件(如果是mybatis项目)
|_static:存放网页静态资源,比如下面的js/css/img
|__js:
|__css:
|__img:
|__font:
|__等等
|_template:存放网页模板,比如thymeleaf/freemarker模板等
|__header
|__sidebar
|__bottom
|__XXX.html等等
|_application.yml 基本配置文件
|_application-dev.yml 开发环境配置文件
|_application-test.yml 测试环境配置文件
|_application-prod.yml 生产环境配置文件
项目结构划分总结
如果从一个用户访问一个网站的情况来看,对应代码目录的流转逻辑如下:
![image-20230302231413503]( https://owen-resource.oss-cn-hangzhou.aliyuncs.com/images/image-20230302231413503.png)
![image-20230302231424922]( https://owen-resource.oss-cn-hangzhou.aliyuncs.com/images/image-20230302231424922.png)
注意事项
1、Contorller层参数传递建议不要使用HashMap,建议使用数据模型定义
2、Controller层里可以做参数校验、异常抛出等操作,但建议不要放太多业务逻辑,业务逻辑尽量放到Service层代码中去做
3、Service层做实际业务逻辑,可以按照功能模块做好定义和区分,相互可以调用
4、功能模块Service之间引用时,建议不要渗透到DAO层(或者mapper层),基于Service层进行调用和复用比较合理
5、业务逻辑层Service和数据库DAO层的操作对象不要混用。Controller层的数据对象不要直接渗透到DAO层(或者mapper层);同理数据表实体对象Entity也不要直接传到Controller层进行输出或展示。