架构师~软件分层设计总结

开发规范的整理

  • RESTful Api规范
  • 软件分层设计
  • 数据实体划分
  • 分层设计主流技术栈

1. RESTful Api规范

  • 自解释,不要用驼峰,小写,单词之间用减号,URL路径使用单数还是复数没有要求,推荐复数
  • 用户列表 GET /users
  • 用户1的内容 GET /users/1
  • 用户1的评论列表 GET /users/1/comments
  • 添加用户 POST /users dto对象
  • 编辑用户 PUT /users dto对象
  • 删除用户1 DELETE /users/1

2. 软件分层设计

  • api层,面向前端,请求日志记录,请求参数校验
  • 业务层,与业务逻辑相关,业务校验,异常处理,数据组合
  • 数据层,多种数据持久化的实现,面向接口的设计
  • 基础设施层,通用的,公用的类库
graph TD subgraph API层 A1[面向前端接口] A2[请求日志记录] A3[请求参数校验] end subgraph 业务层 B1[业务逻辑处理] B2[业务校验] B3[异常处理] B4[数据组合] end subgraph 数据层 C1[接口定义] C2[数据持久化实现] 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 业务层 fill:#f3e5f5 style 数据层 fill:#e8f5e8 style 基础设施层 fill:#fff3e0

3. 数据实体划分

  • 我们以前后分离的主流开发模式来说明
  • VO 后端返回给前端的对象
  • DTO 前端传给后端的对象
  • DO 数据库的对象(poco实体,可添加领域方法,限制调用外部资源,如几个字段的组合形成方法,字段按某个规则计算得到某个值的方法)
sequenceDiagram participant User as 用户 participant Web as 网站前端 participant API as 后端API participant DB as 数据库 User->>Web: 访问页面 Web->>API: GET /users API->>DB: 查询用户列表 DB-->>API: 返回用户数据(vo) API-->>Web: JSON响应 Web-->>User: 渲染页面 User->>Web: 提交表单 Web->>API: POST /users(dto) API->>DB: 创建新用户 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[参数验证<br>Hibernate Validator<br>Joi<br>class-validator] A4[请求日志<br>Log4j/Logback<br>Winston<br>Morgan] end subgraph 业务层["业务层 (业务逻辑)"] direction LR B1[核心框架<br>Spring Framework<br>NestJS<br>Laravel] B2[事务管理<br>Spring Transaction<br>TypeORM Transactions] B3[规则引擎<br>Drools<br>Easy Rules] B4[任务调度<br>XXL-Job<br>Quartz<br>Spring Scheduler<br>Bull] end subgraph 数据层["数据层 (数据持久化)"] direction LR C1[SQL数据库<br>MySQL/PostgreSQL<br>Hibernate/MyBatis<br>TypeORM/Sequelize] C2[NoSQL数据库<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[监控<br>Prometheus/Grafana<br>Spring Boot Actuator] D6[安全<br>Spring Security<br>JWT<br>OAuth2] end API层 --> 业务层 业务层 --> 数据层 数据层 --> 基础设施层 API层 --> 基础设施层 业务层 --> 基础设施层

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: 行业标准API文档规范
  • Springdoc OpenAPI: Spring Boot应用的Swagger集成
  • Redoc: 基于OpenAPI的可视化文档
  • Postman: API开发和文档工具

参数验证

  • 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

业务层技术栈

核心框架

  • 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

规则引擎

  • Drools: Java规则引擎
  • Easy Rules: 轻量级规则引擎
  • Node-RED: 流式规则引擎
  • JSON Rules Engine: 基于JSON的规则引擎

任务调度

  • Java: XXL-Job, Quartz, Spring Scheduler
  • Node.js: Agenda, Bull, Bree
  • Python: Celery, APScheduler
  • 分布式调度: ElasticJob, PowerJob

数据层技术栈

SQL数据库

  • 数据库: 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数据库

  • 文档数据库: MongoDB, Couchbase
  • 键值存储: Redis, etcd
  • 列式存储: Cassandra, HBase
  • 图形数据库: Neo4j, JanusGraph

搜索服务

  • Elasticsearch: 分布式搜索和分析引擎
  • Solr: 基于Lucene的搜索平台
  • Algolia: SaaS搜索服务
  • Meilisearch: 轻量级搜索引擎

文件存储

  • 对象存储: Amazon S3, MinIO, Ceph
  • 分布式文件系统: 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: 服务发现和配置
  • Apollo: 携程开源的配置中心
  • etcd: 分布式键值存储
  • ZooKeeper: 分布式协调服务

消息队列

  • Kafka: 高吞吐量分布式消息系统
  • RabbitMQ: 开源消息代理软件
  • RocketMQ: 阿里开源的消息队列
  • ActiveMQ: Apache开源消息代理
  • Redis Streams: Redis5.0+的消息队列功能

缓存

  • Redis: 内存数据结构存储
  • Memcached: 分布式内存对象缓存系统
  • Ehcache: Java分布式缓存
  • Spring Cache: 缓存抽象层

监控

  • Prometheus: 开源监控系统
  • Grafana: 指标分析和可视化平台
  • Spring Boot Actuator: 应用监控和管理
  • Micrometer: 应用指标门面
  • SkyWalking: 应用性能监控系统

安全

  • Spring Security: 认证和访问控制框架
  • JWT: JSON Web Tokens身份验证
  • OAuth2: 授权框架
  • Keycloak: 开源身份和访问管理
  • Apache Shiro: Java安全框架

总结

现代软件开发中,每个层次都有丰富的技术选择。选择合适的技术栈应考虑以下因素:

  1. 团队熟悉度: 选择团队熟悉的技术可以提高开发效率
  2. 项目需求: 根据项目规模、性能要求和业务特点选择
  3. 社区支持: 选择有活跃社区和良好文档的技术
  4. 生态系统: 考虑技术的完整生态系统和集成能力
  5. 长期维护: 选择有长期支持计划的技术

微服务架构下,这些技术栈通常会组合使用,形成完整的解决方案。例如,Spring Boot + Spring Cloud + MyBatis + Redis + Kafka + Prometheus是一个常见的Java微服务技术组合。

posted @ 2025-08-27 09:09  张占岭  阅读(75)  评论(0)    收藏  举报