23种设计模式 六大设计原则 IOC-->awilix-koa

<!-- //对象是怎么查找属性的
    创建型模式(Creational Patterns):
        单例模式(Singleton Pattern)
        工厂方法模式(Factory Method Pattern)
        抽象工厂模式(Abstract Factory Pattern)
        建造者模式(Builder Pattern)
        原型模式(Prototype Pattern)
    结构型模式(Structural Patterns):
        适配器模式(Adapter Pattern)
        桥接模式(Bridge Pattern)
        组合模式(Composite Pattern)
        装饰器模式(Decorator Pattern)
        外观模式(Facade Pattern)
        享元模式(Flyweight Pattern)
        代理模式(Proxy Pattern)
    行为型模式(Behavioral Patterns):
        责任链模式(Chain of Responsibility Pattern)
        命令模式(Command Pattern)
        解释器模式(Interpreter Pattern)
        迭代器模式(Iterator Pattern)
        中介者模式(Mediator Pattern)
        备忘录模式(Memento Pattern)
        观察者模式(Observer Pattern)
        状态模式(State Pattern)
        策略模式(Strategy Pattern)
        模板方法模式(Template Method Pattern)
        访问者模式(Visitor Pattern) -->
    <!-- 设计原则(Design Principles)
        单一责任原则(Single Responsibility Principle - SRP):
            一个类应该只有一个引起它变化的原因。每个类应该只关注一个特定的功能或责任。

        开放-封闭原则(Open-Closed Principle - OCP):
            软件实体(类、模块、函数等)应该对扩展开放,但对修改封闭。
            这意味着可以通过扩展来改进系统的功能,而不需要修改已经存在的代码。
        
        里氏替换原则(Liskov Substitution Principle - LSP):
            派生类应该能够替代其基类,而不会引入不一致性或破坏程序的正确性。
        
        依赖倒置原则(Dependency Inversion Principle - DIP):
            高层模块不应该依赖于低层模块,两者都应该依赖于抽象。
            抽象不应该依赖于细节,细节应该依赖于抽象。
        
        接口隔离原则(Interface Segregation Principle - ISP):
            不应该强制客户端依赖于它们不使用的接口。接口应该小而专一,而不是大而笨重。
        
        迪米特法则(Law of Demeter - LoD):
            一个对象应该对其他对象有最少的了解,也就是说,对象之间的耦合应该尽可能低。 -->

 

六大设计原则

遵寻solid原则(面向对象):

s:单一原则 一个类只做一件事

o:开放原则  类、模块、函数具有扩展性

l:里氏替换原则  子类可以替换基类

i:接口隔离原则  接口隔离、分散,不要堆在一起

合成/聚合复用原则

npm库:awilix-koa

const { asClass, asValue, createContainer } = require('awilix')
const { scopePerRequest,loadControllers } = require('awilix-koa')
const container = createContainer()
创建container容器
//把容器注入到路由中
app.use(scopePerRequest(container));
app.use(loadControllers(`${__dirname}/routers/*.ts`));
import { GET, route } from 'awilix-koa';
import { Context } from 'koa';
class IndexController {
  @route('/test')
  @GET()
  async actionIndex(ctx: Context) {
    ctx.body = 'Hello World';
  }
}
export default IndexController;
model文件夹,是数据interface
interface文件夹:函数签名,是函数返回
 
posted @ 2022-03-07 16:48  国服第一李师师  阅读(87)  评论(0编辑  收藏  举报