跳到主要内容

· 阅读需 11 分钟

道,侧重于根本性、指导性原则,代表事物的本源和规律。

common

  • 切片组合思想(Fragment and Combination)
  • 代码复用(Develop once, use everywhere)
路由(Router)

定义:

路由是指在应用中,根据特定的 URL 请求路径,将请求映射到相应的处理逻辑(例如控制器方法)。它是前后端通信的关键分,定义了应用程序 响应客户端请求的方式。

用途:

  • 在前端:管理页面导航(如 React Router 或 Vue Router)。
  • 在后端:处理 HTTP 请求,路由到对应的控制器(如 Express、NestJS 中的路由)。

相关概念:

  • 动态路由: 根据路径参数动态匹配 URL(如 /user/:id)。
  • 嵌套路由: 在一个路由中包含子路由(如 parent/child)。
  • 路由守卫(Guard): 用于限制特定路由的访问权限。
中间件(Middleware)

定义:

中间件是程序中一个用于拦截和处理请求或响应的函数。它可以在请求到达路由处理器之前,或者响应返回客户端之前,添加通逻辑(如日志记 录、认证检查等)。

用途:

  • 在 Express 中,定义请求处理的管道。
  • 在 NestJS 中,中间件是特定于模块的。

相关概念:

  • 请求管道: 请求在到达最终路由之前通过的中间件队列。
  • 全局中间件: 应用程序中对所有请求生效的中间件。
  • 错误处理中间件: 专门用于捕获和处理错误的中间件。
拦截器(Interceptor)

定义:

拦截器用于在处理请求或响应时,拦截并对其进行预处理或后处理。它通常用于修改数据、日志记录、缓存、转换等。

用途:

  • 在 NestJS 中,拦截器用于扩展请求管道的功能,例如对响应进行数据格式化。
  • 在前端(如 Axios 拦截器),用于在 HTTP 请求或响应时统一添加操作。

相关概念:

  • 过滤器(Filter): 专门用于捕获异常或过滤特定数据。
  • 钩子(Hooks): 用于在特定生命周期中执行操作。
装饰器(Decorator)

定义:

装饰器是一种特殊的函数,用于在类、方法、属性、参数等上动态添加元数据或功能。它是元编程的一部分。

用途:

  • 在 TypeScript 中,装饰器用于添加类型信息或行为(如 @Component)。

  • 在 NestJS 中,用于定义控制器、路由等(如 @Controller, @Get, @Inject)。

    相关概念:

  • 元数据(Metadata): 描述对象信息的数据(如 Reflect-metadata)。

  • 注解(Annotations): 装饰器的一种具体应用,常见于 Java 和 Spring。

依赖注入(Dependency Injection,DI)

定义:

依赖注入是一种设计模式,指将对象的依赖(例如服务或配置)从外部传递到对象中,而不是对象自己创建依赖。

用途:

  • 提高代码可测试性和模块化。
  • 在 NestJS 或 Angular 中,通过构造函数注入依赖(如服务)。

相关概念:

  • 服务容器(Service Container): 管理依赖关系的核心机制。
  • 注入器(Injector): 提供依赖实例的工具。
控制反转(Inversion of Control,IoC)

定义:

控制反转是一种设计原则,将对象的创建和管理的控制权从代码中移交给框架或容器。它是依赖注入的基础。

用途:

  • 在 NestJS 中,通过 IoC 容器管理服务的实例化。
  • 提供松耦合的设计。

相关概念:

  • 工厂模式(Factory Pattern): 通过工厂方法创建对象。
  • DI 容器: IoC 的核心工具,用于自动注入依赖。
关注点分离(Separation of Concerns,SoC)

定义:

关注点分离是一种设计原则,旨在将系统的不同职责分离到独立模块或层次中,以便更容易维护和扩展。

用途:

  • 将前端和后端逻辑分开。
  • 在 MVC(Model-View-Controller)架构中分离模型、视图和控制器。

相关概念:

  • 单一职责原则(SRP): 每个模块或类只负责一个职责。
  • 模块化设计: 将系统划分为多个独立模块。
  • 分层架构: 例如三层架构(表示层、业务逻辑层、数据层)。
模块化(Modularity)

定义:

模块化是一种软件设计技术,将系统拆分为多个独立且高度内聚的模块,每个模块封装其特定功能,并通过定义良好的接口与其他模块交互。

用途:

  1. 代码组织:
  • 提高代码的可读性、可维护性。

  • 使项目结构清晰。

    1. 团队协作:
  • 不同团队可以独立开发模块,降低耦合。

    1. 复用性:
  • 通过封装和接口实现,模块可以在多个项目中复用。

    1. 调试和测试:
  • 独立模块可以单独测试,降低复杂性。

相关概念:

  • 模块(Module):
  • 封装功能的独立单元,包含代码和资源(如 ES Modules、CommonJS 模块)。
  • 例如在 JavaScript 中,import 和 export 用于模块化。
  • 封装(Encapsulation):
  • 将实现细节隐藏在模块中,仅暴露必要接口供外部使用。
  • 组件化(Componentization):
  • 模块化的一种具体实现形式,常用于前端开发(如 React、Vue 中的组件)。
  • 分层架构(Layered Architecture):
  • 通过逻辑分层(UI 层、业务逻辑层、数据层)实现模块化。
AOP(面向切面编程,Aspect-Oriented Programming)

定义:

AOP 是一种编程范式,旨在通过分离横切关注点(Cross-Cutting Concerns)来增强关注点分离。横切关注点是指影响多个模块但不属于主要 业务逻辑的功能,例如日志记录、安全检查、事务管理等。

用途:

  1. 增强关注点分离:
  • 将非核心业务逻辑(如日志、缓存)从主要代码中提取出来。

    1. 简化代码:
  • 避免在多个地方重复实现横切关注点,减少代码冗余。

    1. 动态扩展功能:
  • 可以在不修改原代码的情况下动态添加行为(例如通过装饰器、拦截器)。

    1. 提高代码可维护性:
  • 将关注点集中管理,使核心逻辑更加清晰。

相关概念:

  • 横切关注点(Cross-Cutting Concerns):
  • 功能性需求,通常跨越多个模块(如安全性、事务性)。
  • 切面(Aspect):
  • 表示横切关注点的实现单元(如日志切面、权限切面)。
  • 切入点(Join Point):
  • 代码中允许横切逻辑插入的位置(如方法执行、属性访问)。
  • 通知(Advice):
  • 在切入点处执行的操作(如方法前执行、方法后执行)。
  • 装饰器和拦截器:
  • 在 AOP 中实现横切关注点的常用工具。
微服务(Microservices)

定义:

微服务是一种架构风格,将单体应用拆分为多个独立的小服务,每个服务负责特定领域,具有独立的数据库、代码库和部署生命周期。服务之间通过 轻量协议(如 HTTP、消息队列)通信。

用途:

  1. 解耦:
  • 各服务独立运行、部署和扩展,降低模块间的依赖性。
  1. 技术灵活性:
  • 不同服务可以采用不同的技术栈和编程语言。
  1. 独立部署:
  • 单一服务的修改不会影响整个系统,支持快速迭代。
  1. 弹性扩展:
  • 根据流量需求,独立扩展某些服务(如只扩展用户服务)。
  1. 高可用性:
  • 某些服务失败时,其他服务仍可运行,减少系统崩溃风险。

相关概念:

  1. 单体架构(Monolithic Architecture):
  • 与微服务对立,所有功能放在一个整体中。
  • 适合小型项目,但扩展性和维护性差。
  1. 服务发现(Service Discovery):
  • 微服务动态注册和寻找其他服务的机制。
  1. API 网关(API Gateway):
  • 微服务的入口,负责路由请求、认证等功能。
  1. 轻量通信协议:
  • 服务之间通过 REST、GraphQL 或消息队列(如 RabbitMQ、Kafka)通信。
  1. 容器化(Containerization):
  • 微服务通常通过容器(如 Docker)进行封装和部署。

Front End

  • 设计Token

Back End

  • 服务启动模式。前台启动(命令行)、后台启动(-d detached)
docker run my-service
docker run -d my-service