开发规范的整理
- 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微服务技术组合。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |