榷另辑 发表于 2025-8-27 08:21:51

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

开发规范的整理


[*]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:#fff3e03. 数据实体划分


[*]我们以前后分离的主流开发模式来说明
[*]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框架
Spring Boot/MVC
Express.js
NestJS
FastAPI]      A2[API文档
Swagger/OpenAPI
Springdoc]      A3[参数验证
Hibernate Validator
Joi
class-validator]      A4[请求日志
Log4j/Logback
Winston
Morgan]    end    subgraph 业务层["业务层 (业务逻辑)"]      direction LR      B1[核心框架
Spring Framework
NestJS
Laravel]      B2[事务管理
Spring Transaction
TypeORM Transactions]      B3[规则引擎
Drools
Easy Rules]      B4[任务调度
XXL-Job
Quartz
Spring Scheduler
Bull]    end    subgraph 数据层["数据层 (数据持久化)"]      direction LR      C1[SQL数据库
MySQL/PostgreSQL
Hibernate/MyBatis
TypeORM/Sequelize]      C2[NoSQL数据库
MongoDB/Redis
Mongoose
Spring Data]      C3[搜索服务
Elasticsearch
Solr]      C4[文件存储
Amazon S3
MinIO]    end    subgraph 基础设施层["基础设施层 (通用工具)"]      direction LR      D1[依赖注入
Spring IoC
InversifyJS]      D2[配置管理
Spring Cloud Config
Consul
Apollo]      D3[消息队列
Kafka/RabbitMQ
Redis Streams]      D4[缓存
Redis/Memcached
Spring Cache]      D5[监控
Prometheus/Grafana
Spring Boot Actuator]      D6[安全
Spring Security
JWT
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安全框架
总结

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

[*]团队熟悉度: 选择团队熟悉的技术可以提高开发效率
[*]项目需求: 根据项目规模、性能要求和业务特点选择
[*]社区支持: 选择有活跃社区和良好文档的技术
[*]生态系统: 考虑技术的完整生态系统和集成能力
[*]长期维护: 选择有长期支持计划的技术
微服务架构下,这些技术栈通常会组合使用,形成完整的解决方案。例如,Spring Boot + Spring Cloud + MyBatis + Redis + Kafka + Prometheus是一个常见的Java微服务技术组合。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 架构师~软件分层设计总结