架構師~軟件分層設計總結
開發(fā)規(guī)范的整理
- RESTful Api規(guī)范
- 軟件分層設計
- 數(shù)據(jù)實體劃分
- 分層設計主流技術棧
1. RESTful Api規(guī)范
- 自解釋,不要用駝峰,小寫,單詞之間用減號,URL路徑使用單數(shù)還是復數(shù)沒有要求,推薦復數(shù)
- 用戶列表 GET /users
- 用戶1的內容 GET /users/1
- 用戶1的評論列表 GET /users/1/comments
- 添加用戶 POST /users dto對象
- 編輯用戶 PUT /users dto對象
- 刪除用戶1 DELETE /users/1
2. 軟件分層設計
- api層,面向前端,請求日志記錄,請求參數(shù)校驗
- 業(yè)務層,與業(yè)務邏輯相關,業(yè)務校驗,異常處理,數(shù)據(jù)組合
- 數(shù)據(jù)層,多種數(shù)據(jù)持久化的實現(xiàn),面向接口的設計
- 基礎設施層,通用的,公用的類庫
graph TD
subgraph API層
A1[面向前端接口]
A2[請求日志記錄]
A3[請求參數(shù)校驗]
end
subgraph 業(yè)務層
B1[業(yè)務邏輯處理]
B2[業(yè)務校驗]
B3[異常處理]
B4[數(shù)據(jù)組合]
end
subgraph 數(shù)據(jù)層
C1[接口定義]
C2[數(shù)據(jù)持久化實現(xiàn)]
end
subgraph 基礎設施層
D1[通用工具類]
D2[公用類庫]
D3[配置管理]
D4[第三方服務集成]
end
A1 --> B1
A2 --> B1
A3 --> B1
B1 --> C1
B2 --> C1
B3 --> C1
B4 --> C1
C1 --> C2
C2 --> D1
C2 --> D2
B1 --> D1
B1 --> D2
A1 --> D1
D1 --> D3
D2 --> D4
style API層 fill:#e1f5fe
style 業(yè)務層 fill:#f3e5f5
style 數(shù)據(jù)層 fill:#e8f5e8
style 基礎設施層 fill:#fff3e0
3. 數(shù)據(jù)實體劃分
- 我們以前后分離的主流開發(fā)模式來說明
- VO 后端返回給前端的對象
- DTO 前端傳給后端的對象
- DO 數(shù)據(jù)庫的對象(poco實體,可添加領域方法,限制調用外部資源,如幾個字段的組合形成方法,字段按某個規(guī)則計算得到某個值的方法)
sequenceDiagram
participant User as 用戶
participant Web as 網(wǎng)站前端
participant API as 后端API
participant DB as 數(shù)據(jù)庫
User->>Web: 訪問頁面
Web->>API: GET /users
API->>DB: 查詢用戶列表
DB-->>API: 返回用戶數(shù)據(jù)(vo)
API-->>Web: JSON響應
Web-->>User: 渲染頁面
User->>Web: 提交表單
Web->>API: POST /users(dto)
API->>DB: 創(chuàng)建新用戶
DB-->>API: 操作結果(vo)
API-->>Web: 201 Created
Web-->>User: 顯示成功消息
Note over User,DB: 用戶注冊流程完成
4. 分層設計主流技術棧
以下是基于軟件分層架構中每個層次和功能類型的流行技術棧介紹:
flowchart LR
subgraph API層["API層 (面向前端)"]
direction LR
A1[Web框架<br>Spring Boot/MVC<br>Express.js<br>NestJS<br>FastAPI]
A2[API文檔<br>Swagger/OpenAPI<br>Springdoc]
A3[參數(shù)驗證<br>Hibernate Validator<br>Joi<br>class-validator]
A4[請求日志<br>Log4j/Logback<br>Winston<br>Morgan]
end
subgraph 業(yè)務層["業(yè)務層 (業(yè)務邏輯)"]
direction LR
B1[核心框架<br>Spring Framework<br>NestJS<br>Laravel]
B2[事務管理<br>Spring Transaction<br>TypeORM Transactions]
B3[規(guī)則引擎<br>Drools<br>Easy Rules]
B4[任務調度<br>XXL-Job<br>Quartz<br>Spring Scheduler<br>Bull]
end
subgraph 數(shù)據(jù)層["數(shù)據(jù)層 (數(shù)據(jù)持久化)"]
direction LR
C1[SQL數(shù)據(jù)庫<br>MySQL/PostgreSQL<br>Hibernate/MyBatis<br>TypeORM/Sequelize]
C2[NoSQL數(shù)據(jù)庫<br>MongoDB/Redis<br>Mongoose<br>Spring Data]
C3[搜索服務<br>Elasticsearch<br>Solr]
C4[文件存儲<br>Amazon S3<br>MinIO]
end
subgraph 基礎設施層["基礎設施層 (通用工具)"]
direction LR
D1[依賴注入<br>Spring IoC<br>InversifyJS]
D2[配置管理<br>Spring Cloud Config<br>Consul<br>Apollo]
D3[消息隊列<br>Kafka/RabbitMQ<br>Redis Streams]
D4[緩存<br>Redis/Memcached<br>Spring Cache]
D5[監(jiān)控<br>Prometheus/Grafana<br>Spring Boot Actuator]
D6[安全<br>Spring Security<br>JWT<br>OAuth2]
end
API層 --> 業(yè)務層
業(yè)務層 --> 數(shù)據(jù)層
數(shù)據(jù)層 --> 基礎設施層
API層 --> 基礎設施層
業(yè)務層 --> 基礎設施層
API層技術棧
Web框架
- Java: Spring Boot/MVC, Jersey, Micronaut, Quarkus
- Node.js: Express.js, Koa, NestJS, Fastify
- Python: Django REST Framework, FastAPI, Flask
- Go: Gin, Echo, Beego
- PHP: Laravel, Symfony, Lumen
API文檔
- Swagger/OpenAPI: 行業(yè)標準API文檔規(guī)范
- Springdoc OpenAPI: Spring Boot應用的Swagger集成
- Redoc: 基于OpenAPI的可視化文檔
- Postman: API開發(fā)和文檔工具
參數(shù)驗證
- Java: Hibernate Validator, Spring Validation
- Node.js: Joi, express-validator, class-validator
- Python: Pydantic, Marshmallow
- 通用: JSON Schema驗證器
請求日志
- Java: Log4j, Logback, SLF4J
- Node.js: Winston, Morgan, Bunyan
- Python: Logging, Structlog
- 分布式追蹤: Jaeger, Zipkin, SkyWalking
業(yè)務層技術棧
核心框架
- Java: Spring Framework, Jakarta EE, Micronaut
- Node.js: NestJS, LoopBack
- Python: Django, Celery(異步任務)
- PHP: Laravel, Symfony
事務管理
- Java: Spring Transaction Management, JTA
- Node.js: TypeORM事務, Sequelize事務
- Python: Django事務, SQLAlchemy會話管理
- 分布式事務: Seata, Atomikos
規(guī)則引擎
- Drools: Java規(guī)則引擎
- Easy Rules: 輕量級規(guī)則引擎
- Node-RED: 流式規(guī)則引擎
- JSON Rules Engine: 基于JSON的規(guī)則引擎
任務調度
- Java: XXL-Job, Quartz, Spring Scheduler
- Node.js: Agenda, Bull, Bree
- Python: Celery, APScheduler
- 分布式調度: ElasticJob, PowerJob
數(shù)據(jù)層技術棧
SQL數(shù)據(jù)庫
- 數(shù)據(jù)庫: MySQL, PostgreSQL, Oracle, SQL Server
- ORM框架:
- Java: Hibernate, MyBatis, Spring Data JPA
- Node.js: TypeORM, Sequelize, Prisma
- Python: SQLAlchemy, Django ORM
- PHP: Eloquent, Doctrine
NoSQL數(shù)據(jù)庫
- 文檔數(shù)據(jù)庫: MongoDB, Couchbase
- 鍵值存儲: Redis, etcd
- 列式存儲: Cassandra, HBase
- 圖形數(shù)據(jù)庫: Neo4j, JanusGraph
搜索服務
- Elasticsearch: 分布式搜索和分析引擎
- Solr: 基于Lucene的搜索平臺
- Algolia: SaaS搜索服務
- Meilisearch: 輕量級搜索引擎
文件存儲
- 對象存儲: Amazon S3, MinIO, Ceph
- 分布式文件系統(tǒng): HDFS, GlusterFS
- 云存儲: Google Cloud Storage, Azure Blob Storage
基礎設施層技術棧
依賴注入
- Java: Spring IoC, Google Guice, Dagger
- Node.js: InversifyJS, Awilix, TypeDI
- Python: Dependency Injector, Injector
- C#: .NET Core DI, Autofac
配置管理
- Spring Cloud Config: 集中式配置管理
- Consul: 服務發(fā)現(xiàn)和配置
- Apollo: 攜程開源的配置中心
- etcd: 分布式鍵值存儲
- ZooKeeper: 分布式協(xié)調服務
消息隊列
- Kafka: 高吞吐量分布式消息系統(tǒng)
- RabbitMQ: 開源消息代理軟件
- RocketMQ: 阿里開源的消息隊列
- ActiveMQ: Apache開源消息代理
- Redis Streams: Redis5.0+的消息隊列功能
緩存
- Redis: 內存數(shù)據(jù)結構存儲
- Memcached: 分布式內存對象緩存系統(tǒng)
- Ehcache: Java分布式緩存
- Spring Cache: 緩存抽象層
監(jiān)控
- Prometheus: 開源監(jiān)控系統(tǒng)
- Grafana: 指標分析和可視化平臺
- Spring Boot Actuator: 應用監(jiān)控和管理
- Micrometer: 應用指標門面
- SkyWalking: 應用性能監(jiān)控系統(tǒng)
安全
- Spring Security: 認證和訪問控制框架
- JWT: JSON Web Tokens身份驗證
- OAuth2: 授權框架
- Keycloak: 開源身份和訪問管理
- Apache Shiro: Java安全框架
總結
現(xiàn)代軟件開發(fā)中,每個層次都有豐富的技術選擇。選擇合適的技術棧應考慮以下因素:
- 團隊熟悉度: 選擇團隊熟悉的技術可以提高開發(fā)效率
- 項目需求: 根據(jù)項目規(guī)模、性能要求和業(yè)務特點選擇
- 社區(qū)支持: 選擇有活躍社區(qū)和良好文檔的技術
- 生態(tài)系統(tǒng): 考慮技術的完整生態(tài)系統(tǒng)和集成能力
- 長期維護: 選擇有長期支持計劃的技術
微服務架構下,這些技術棧通常會組合使用,形成完整的解決方案。例如,Spring Boot + Spring Cloud + MyBatis + Redis + Kafka + Prometheus是一個常見的Java微服務技術組合。
浙公網(wǎng)安備 33010602011771號