当前位置: 首页 > 后端技术 > Node.js

Nest.js设计核心思想

时间:2023-04-03 23:35:26 Node.js

NestJs设计核心思想转载请注明出处,原github地址NestJs设计核心思想IoC(InversionofControl)&DI(DependencyInjection)给应用一个中心————Ioc容器,并将依赖对象的实例化过程提取到Ioc容器中,Ioc容器管理依赖关系和依赖对象的注入控制反转。谁控制谁?当我们直接new一个对象时,程序应用正在主动创建它;但是在使用IoC模型进行开发时,会使用容器来负责创建这些对象。这时,容器正在控制对象。什么是反转?在传统的程序应用中,我们会在依赖类中主动获取依赖对象,而现在,这个过程被逆转了。依赖对象由容器管理并注入到依赖类中。描述IoC是一种方法论,也是一种工程思想。使用IoC意味着你将设计好的依赖对象交给了容器的控制,而不是直接在Nest.js中控制对象内部,而是将创建和寻找Provider的控制权交给了容器,而容器会注入它,所以对象与对象的耦合是松散的,有利于功能的复用,更重要的是让整个程序的结构变得非常灵活。依赖注入描述DI是指模块之间的依赖关系由容器规定,每个模块的依赖都在容器注入的Nest.js中,开发者只需要在Module中完成依赖的注册,并在构造函数中声明即可类的。依赖类不关心依赖对象来自哪里,谁实现了Nest.js实现方法Container:Nest.jsruntime*依赖对象:Providers(其他类的提供者/依赖)Module:Module(依赖寄存器)在运行Nest之前.js,将provider类和依赖类标记为依赖Nest.js运行时,遍历Module中注册的标签,然后创建依赖对象,缓存并返回,如果已经缓存则返回一个存在的实例优点让模块专注于设计任务避免模块更换时的副作用将执行任务和任务实现解耦模块只依赖于设计契约,不需要关注其他系统如何工作缺点因为使用了反射技术来创建依赖objects,效率比直接new慢,创建依赖实例的过程会变得复杂不同的业务实现。核心思想是拦截哪些方法,拦截后如何处理。切面切面是分散在系统各处的通用业务逻辑代码,如日志模块、权限模块、事务模块等。切面用于加载切入点和建议切面通常是一个可以定义切入点和建议的类。类是对象特征的抽象,方面是横切关注点的抽象。切面是业务流程运行的具体步骤,是应用程序运行过程中的关注点。一个关注点通常会横切多个对象,因此也称为横切关注点。JointPoint关节点是程序执行过程中的一个特定点,一般是类中的一个方法调用。连接点是程序在执行过程中可以插入方面的地方,例如方法调用、异常抛出、字段修改等。Advicenotification/enhancednotification是AOP对特定入口点进行的增强处理。就是拦截连接点后要执行的代码。通知可以分为前置通知Before、后置通知AfterReturning、异常通知AfterThrowing、最终通知After、环绕通知Around五类。PointCutpointcutPointcutpoint是一个带有advice的连接点,主要体现在程序中编写pointcut表达式。切入点是拦截连接点的定义。切入点用于定义通知应切入哪些连接点。不同的通知需要切入不同的连接点。这种精确匹配由切入点的正则表达式定义。切入点是可以插入增强处理的连接点。当某个连接点满足执行要求时,该连接点将被连接增强处理,该连接点成为切入点。入口点是拦截的方法,拦截后连接点JointPoint会成为入口点。ProxyProxy对象Proxy对象是AOP创建的对象,包括通知,proxy是target对象的增强。代理是在通知应用于目标对象后动态创建的对象。可以简单理解为代理对象的功能相当于目标对象的核心业务逻辑功能加上公共功能。代理对象对用户是透明的,是程序运行过程的产物。编织是通过切入点切入的过程,将方面应用于目标对象并导致创建代理对象。将方面应用到目标对象以创建新代理对象的过程。这个过程可以发生在编译器、类重印期和运行时。不同的发生点有不同的前提条件。如果它发生在编译器中,则需要一个支持这种AOP实现的特殊编译器。如果发生在类重印期,则需要一个支持AOP实现的特殊类。动态实施的机制。Target目标对象是指代理的目标对象,是指要织入的对象模块。目标对象是那些即将切入切面的对象,即被通知的对象。这些对象中只剩下干净的核心业务逻辑代码,所有常用的功能都在等待AOP容器切入。目标对象就是AOP进行增强处理的对象,也称为增强对象。如果AOP是通过运行时代理实现的,那么这个对象就是一个代理对象。