工程代码架构

一、系统架构图

工程代码架构_第1张图片

二、package设计

com.frcoder.csdn.api
com.frcoder.csdn.api.http
com.frcoder.csdn.api.dubbo
com.frcoder.csdn.api.mq.consumer
com.frcoder.csdn.api.schedulex
com.frcoder.csdn.biz
com.frcoder.csdn.biz.biz1
com.frcoder.csdn.biz.biz2
com.frcoder.csdn.external
com.frcoder.csdn.external.system1
com.frcoder.csdn.external.system2
com.frcoder.csdn.enums
com.frcoder.csdn.exception
com.frcoder.csdn.domain
com.frcoder.csdn.domain.d1
com.frcoder.csdn.domain.d2
com.frcoder.csdn.data
com.frcoder.csdn.data.mysql
com.frcoder.csdn.data.nosql
com.frcoder.csdn.data.oss
com.frcoder.csdn.cache
com.frcoder.csdn.board
com.frcoder.csdn.lock
com.frcoder.csdn.monitor
com.frcoder.csdn.config
com.frcoder.csdn.config.constants
com.frcoder.csdn.config.property
com.frcoder.csdn.config.settingcenter
com.frcoder.csdn.config.gray
com.frcoder.csdn.middleware
com.frcoder.csdn.middleware.http
com.frcoder.csdn.middleware.http.filter
com.frcoder.csdn.middleware.mq
com.frcoder.csdn.middleware.dubbo
com.frcoder.csdn.middleware.mybatis
com.frcoder.csdn.middleware.redis
com.frcoder.csdn.tools

三、分层解释

1. 接口层api

是程序的入口,供外部调用,处理所有输入:校验参数、转换参数、限流、加锁

2. 业务层biz

处理具体业务,为每个业务建一个文件夹
只处理核心逻辑,应该是和流程图、时序图一一对应的,图中体现不出来的处理,就不应该放在这个层,比如:对象转换
只处理流程图的边

3. 领域层domain

处理业务对象的生命周期,创建、销毁、对象转换、状态转移
只处理流程图的节点

4. 外部接口层external

依赖的第三方接口,要处理:参数转换,返回结果转换,异常处理,风险隔离,日志,监控,埋点

5. 数据层data

mysql

对mysql数据库的操作

实体对象层entry

负责存储与持久化

NoSql

对NoSql数据库的操作

实体对象层entry

负责存储与持久化

oss

对oss的操作

实体对象层object

负责存储与持久化

6. 缓存层cache

缓存的特点是不生产数据,并且不是强依赖,数据丢失了可以自动恢复,不需要手动重建
注意:并不是redis里的数据都叫缓存,满足上述条件才叫缓存。如果只是利用redis的高速存储来保存数据,不能算做缓存,例如:常见的redis分布式锁。缓存必须有命中/不命中的概念。

7. 监控层monitor(包含统计)

每个监控项都应该在这个包里有一个类
每个业务都至少应该有一个监控类
做什么事,做到了什么状态,用了多长时间
利用中心存储进行计数,比如:UV、PV、正在处理的任务数、成功、失败的任务数,并定时上报到数据中心,或者打印日志

8. 配置层config

获取和加载各种配置,本地配置、环境配置、远程配置中心、灰度

9. 中间件层(组件层)middleware

处理各种中间件的注册,配置,和基础调用

10. 工具类层tools

各类Util
计时器
日志打印类

11. 其他层

为了方便统一管理,将一些行为单独提取到一个包里

锁lock

每个锁都应该在这个包里有一个类,类里应该包含:锁的key,过期时间,加锁和释放锁的函数

枚举类enums

异常类exception

四、答疑

如果区分业务层和领域层?

业务层只处理流程图的边,领域层只处理流程图的节点。

外部系统有时也可以用来存放数据,如何区分数据层和外部接口层?

如果存储数据归自己所有,则应该放在数据层,比如一个微服务会有自己的数据库,OSS。
如果存储的数据是存储在外部系统,不归自己所有,自己不了解,也没有权限直接处理底层存储,则应该放在外部接口层,比如系统对接了图床。

你可能感兴趣的:(架构设计,软件工程,程序开发,架构,redis,缓存)