# NEFU-软件体系结构-实验 **Repository Path**: cricosly/software-architecture ## Basic Information - **Project Name**: NEFU-软件体系结构-实验 - **Description**: NEFU计控学院的大三上学期,基于Spring Boot 3.2.0 ,软件体系结构,实验 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-01 - **Last Updated**: 2024-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringBoot ## README # Software Architecture Examples ## Introductions 本实验课程是软件体系结构课程的实践环节,通过实战讲解和指导,完成目前主流的软件开发平台上实践组件开发和常用的软件体系结构风格的实践开发,从而进一步理解和掌握软件体系结构相关的基本概念和基本理论,帮助学生建立起对软件体系结构更加直观、深刻的认识,激发学生的兴趣和潜能,进而培养和提高学生的软件设计与开发能力。 软件体系结构实验项目,要求学生理解: * 组件化开发 * 单一职责原则 * 依赖注入 * 面向测试编程 * 前后端解耦的开发模式 * 基本微服务架构 ## Development Environments & Technologies Idea Ultimate OpenJDK ^17 springboot ^3.2.0 springmvc spring-data-jdbc MySQL ^8,基于云服务器搭建远程MySQL8数据库服务器供学生学习测试使用 ## Online Tutorials [实验讲解视频](https://mooc1.chaoxing.com/mooc-ans/nodedetailcontroller/visitnodedetail?courseId=91374637&knowledgeId=800996180) ## Update ### 2023.11.11 组件使用Lombok @RequiredArgsConstructor注解自动生成依赖组件的有参构造函数。 ## 实验一 组件化开发实验 ### 实验目的 理解工程项目组件化开发的作用与意义 理解组件的抽象设计原则 理解依赖注入原理 掌握基于spring框架项目环境的搭建方法 掌握基于spring框架组件管理及依赖注入的声明使用方法 掌握基于spring-data-jdbc持久层组件的声明使用方法 掌握基于spring的数据库事务的声明使用方法 掌握组件测试用例的声明使用方法 ### 实验内容 **需求** 模拟一个实现地址管理的微服务。主要功能包括: * 每个用户可有多个地址,每个地址只对应一个用户 * 包含普通用户及管理员角色 * 添加用户 * 基于ID查询用户详细信息 * 添加指定用户地址 * 查询指定ID用户全部地址 * 基于指定ID地址查询对应用户的详细信息 基于需求分析,设计数据表 * 用户表,账号/密码/角色权限 * 地址表,详细地址/用户ID **过程** * 前置要求,完成idea/maven本地配置 * 创建springboot工程项目;添加相应项目依赖;整理项目开发源码结构 * 编写SQL脚本,基于需求创建对应数据表及合适数据类型字段 * 声明springboot数据库配置以及日志配置 * 声明创建对应数据表的DO类 * 声明创建操作DO数据的基础持久层组件 * 创建持久层组件测试用例,注入组件实现组件功能测试验证 * 声明创建业务逻辑层组件,基于依赖注入调用持久层组件实现业务逻辑操作 * 创建业务逻辑组件测试用例,注入组件实现组件功能测试验证 ## 实验二 管道过滤器实验 ### 实验目的 理解管道过滤器的作用与意义 理解Spring AOP实现原理 掌握基本RESTFUL风格接口规范的声明原则 掌握基于springmvc控制层组件的声明使用方法 掌握基于spring interceptor登录状态及执行权限验证的声明使用方法 掌握基于全局异常处理的统一异常信息维护的实现方法 掌握基于AOP切面/自定义注解,实现零耦合细粒度的权限验证的方法 掌握HTTP请求测试脚本的声明使用方法 ### 实验内容 **需求** 基于实验一项目继续完成,模拟实现基于微服务的数据请求/响应。主要功能包括: * 用户单点登录 * 登录权限请求验证,非法请求返回友好的错误信息 * 用户能且仅能获取自己的全部地址,水平权限验证 * 管理员获取指定用户信息 * 管理员功能请求的权限验证,非法请求返回友好的错误信息 **过程** * 声明创建控制层组件及暴露的服务接口/数据参数等,基于依赖注入调用业务逻辑组件实现流程控制操作 * 自定义异常类,及全局异常处理逻辑 * 声明创建Interceptor实现对登录权限请求的验证 * 声明创建Interceptor实现对管理员权限请求的验证 * 配置Interceptor拦截路径规则 * 创建HTTP请求测试脚本,实现控制层组件的功能测试验证 ## spring-data-jdbc spring-data-jdbc框架提供了一系列灵活的接口封装简化了JDBC操作,使用上类似JPA。 CrudRepository接口,提供了针对DTO类的基本CRUD操作方法。T,操作的DTO类型,ID,主键类型 * save()方法,默认保存全部属性值,值为null时也会保存到数据库,因此会覆盖数据库设置的default值 * save()方法,当保存对象id属性非空时,执行update更新方法,同样会覆盖全部属性值 * findById(T id) * @Query注解,声明执行的查询语句,自动实现封装,但复杂的关联查询需手动声明映射/转换返回结果集 * @Modifying注解,结合@Query使用,允许@Query声明改变数据状态的语句,可用于局部数据更新