找回密码
 立即注册
首页 业界区 安全 架构师~软件分层设计总结

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

榷另辑 7 天前
开发规范的整理


  • 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微服务技术组合。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册