什么是面向对象

  • 一切皆对象
  • 封装、继承、多态
  1. class Person{
  2. protected string name;
  3. protected Person(string name) {
  4. this.name = name;
  5. }
  6. public void eat()
  7. {
  8. System.out.println(this.name+"吃饭!");
  9. }
  10. public void work()
  11. {
  12. System.out.println(this.name+"工作!");
  13. }
  14. public void sleep()
  15. {
  16. System.out.println(this.name+"睡觉!");
  17. }
  18. }
  19. class Rd extends Person{
  20. public Rd(string name){
  21. super(name)
  22. }
  23. public void work(){
  24. System.out.println(this.name+"写代码!");
  25. }
  26. }
  27. class Pm extends Person{
  28. public Pm(string name,string age){
  29. super(name,age)
  30. }
  31. public void work(){
  32. System.out.println(this.name+"写需求!");
  33. }
  34. }
  35. Person person = new Pm('A')
  36. person.eat();//A吃饭
  37. person.work();//A写需求
  38. person.sleep();//A睡觉

把大象放进冰箱(假设大象很乖,冰箱很大,门能关住)

面向对象编程

  1. 🐘 = {}
  2. 📦 = new Class(){
  3. open(){}
  4. put(🐘){}
  5. close(){}
  6. }
  7. 📦.open()
  8. 📦.put(🐘)
  9. 📦.close()

面向过程编程

  1. struct 🐘+📦
  2. openDoor(📦){}
  3. putElephant(🐘){}
  4. closeDoor(){📦}

依赖注入

网上例子

小明有三大 逛知乎、玩王者农药、抢微信红包

nestjs相关 - 图1

想做这些事,他必须依赖一部手机,所以他买了一台 iphone6,接下来我们来制造一个 iphone6:

  1. class iPhone6 extends Iphone
  2. {
  3. function read(person="某人"){
  4. //"打开了知乎然后编了一个故事";
  5. }
  6. function play(person="某人"){
  7. //"打开了王者农药并送起了人头";
  8. }
  9. function grab(person="某人")
  10. {
  11. //"开始抢红包却只抢不发 \n";
  12. }
  13. }

然后小王就可以-》 逛知乎、玩王者农药、抢微信红包:

  1. class Ming extends Person
  2. {
  3. private name;
  4. function read(){
  5. (new iPhone6())->read(this.name);//逛知乎
  6. }
  7. function play(){
  8. (new iPhone6())->play(this.name);//玩农药
  9. }
  10. function grab(){
  11. (new iPhone6())->grab(this.name);//抢红包
  12. }
  13. }
  14. $ming = new Ming(); //小明起床
  15. $ming->read(); //小明打开了知乎然后编了一个故事
  16. $ming->play(); //小明打开了王者农药并送起了人头
  17. $ming->grab(); //小明开始抢红包却只抢不发

经历了漫长的抢红包,小明终于把有钱 把 iphone6 换成了二手的 iphoneX 了,要想使用,小明必须经过一番改造:
nestjs相关 - 图2

  1. class iphoneX extends Iphone{
  2. //省略...
  3. }
  4. class Ming extends Person
  5. {
  6. private name;
  7. function read(){
  8. (new iphoneX())->read(this.name);//逛知乎
  9. }
  10. function play(){
  11. (new iphoneX())->play(this.name);//玩农药
  12. }
  13. function grab(){
  14. (new iphoneX())->grab(this.name);//抢红包
  15. }
  16. }

这样显然不好,如果后面在换一个 iPhone13,又要经过一次改造:

  1. class Ming extends Person
  2. {
  3. private name;
  4. private phone; //将手机作为自己的成员变量
  5. construct($phone)
  6. {
  7. this._name = '小明';
  8. this.phone = $phone;
  9. }
  10. function read()
  11. {
  12. this.phone->read(this.name); //逛知乎
  13. }
  14. function play()
  15. {
  16. this.phone->play(this.name);//玩农药
  17. }
  18. function grab()
  19. {
  20. this.phone->grab(this.name);//抢红包
  21. }
  22. }
  23. const $phone = new IphoneX(); //创建一个iphoneX的实例
  24. if($phone->isBroken()){ //如果iphone不可用,则使用旧版手机
  25. $phone = new Iphone6();
  26. }
  27. const $ming = new Ming($phone);//小明不用关心是什么手机,他只要玩就行了。
  28. $ming->read();
  29. $ming->play();
  30. $ming->grab();

上面的操作用专业的词的说法:使用了 依赖注入(DI)

反转的是什么:依赖对象的获取被反转了

  • 有三种类型的依赖注入:

    • 构造函数注入:依赖关系是通过 class 构造器提供的。
    • setter 注入:注入程序用客户端的 setter 方法注入依赖项。
    • 接口注入:依赖项提供了一个注入方法,该方法将把依赖项注入到传递给它的任何客户端中。客户端必须实现一个接口,该接口的 setter 方法接收依赖。

Nestjs 概览

模块-module

每个 Nest 应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能。

nestjs相关 - 图3

控制器-controllers

nestjs相关 - 图4

提供者-providers

nestjs相关 - 图5

整体的来看:

nestjs相关 - 图6

puppeteer回放工具

页面地址:http://10.9.29.19:7856/

前端+node后端如何共存

  • 开发阶段:同一个项目如何开
  • 部署阶段:又如果处理

脚本如何回放

  • 如何执行一段代码

    • 代码合法否
    • eval 还是 new Function()
  • 拿到执行结果

    • 总/成功任务数
    • 异常信息
  • 任务队列

  • 超时处理

  • 任务通知

权限&登录信息

  • 如何做权限
  • 定时任务
  • 页面需要登录怎么做