# WA04

该项目架构从 COLA 5 的基础上进行了修改，主要修改了以下几个地方：

- 项目布局发生了变化，不再是一个单一的项目，而是一个多模块的项目，每个模块都是一个独立的项目，可以单独运行，也可以作为一个模块被其他模块引用。
- 项目的依赖管理发生了变化，使用 Gradle 进行依赖管理。
- 没有使用 COLA 的组件库，我们自己构建了适合的组件库

## 结构变化

### Infrastructure

基础实施层（Infrastructure Layer）

1. Configuration: Springboot 的配置。
2. DTO: 系统的传输对象，包含请求、响应还有数据库的Model。
3. Adapter: 整个系统的对外的处理逻辑，里面有具体的技术细节，追求简化和剥离业务逻辑，要求跟逻辑区分。
4. Repository 数据仓库，写 Mysql 数据的 Mapper，在 Mybatis 里叫 Mapper，在JPA里叫 Repository。

### Api

接口层（Api Layer），负责提供和接受外部的请求比如 Restful，RabbitMQ Messaging

1. api-websocket: 负责 Websocket 长链接的会话保持，处理简单的消息下行。
2. api-user: 系统的认证和授权，还有用户相关的API提供，比如小孩相关、设备相关的信息CURD的接口。 api-user 拥有整个系统大部分的逻辑。
3. api-message: 提供消息上行接口和拉取消息接口，消息从客户端HTTP接口产生后在 api-message 里RabbitMQ发送至消息队列。
4. api-location: 系统定位服务处理定位相关业务逻辑，如电子围栏、IOT 定位。同时也拥有产生定位消息的能力。

## 架构图

![img.png](document/img.png)

## 路径上下文

![img2.png](http://doc.sikey.com.cn/raiz5jee8eiph0eeFooV/api/v1/projects/4986187/resources/471078/image-preview)

## 启动项目

> TODO

## Reference

- [接口文档](http://doc.sikey.com.cn)
- [前端项目](#)
- [COLA5](https://github.com/alibaba/COLA)
- [COLA架构介绍](https://juejin.cn/post/7250914419578912805)
- [COLA架构解析](https://www.mcaoyuan.com/archives/cola)
- [COLA实践](https://blog.csdn.net/daqiang012/article/details/119243935?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-119243935-blog-133182049.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.2&utm_relevant_index=4)
- [Alibaba/COLA架构中的Gateway层的代码腐败问题](https://blog.csdn.net/qq_31205803/article/details/133182049)
- [Clean Architecture](https://github.com/alesimoes/hexagonal-clean-architecture)

