20220125 TIL


今日は昨日の内容をゆるやかな組み合わせに変えました.

ルースカップリング


他のクラスを直接使用するクラスの依存性を低減します.

きょうけつごう


->new宣言が多すぎるのはよくない.
->結合がない場合は、強い結合は使用できません

実習

import { ProductService} from './services/product.service.js'
import { CashService } from './services/cash.service.js'

export class ProductController{
    buyProduct=(req, res)=>{
        //1. 가진 돈 검증하는 코드(10줄->2줄)
        const cashService = new CashService()
        const hasMoney = cashService.checkValue()

        //판매여부 검증하는 코드(10줄 -> 2줄)
        const productService = new ProductService()
        const isSoldout = productService.checkSoldout()

        //3. 상품 구매하는 코드
        if(hasMoney && !isSoldout){
            //상품구매
            res.send('상품을 구매합니다')
        }
    }
    refundProduct=(req, res)=> {
        //1. 판매여부 검증하는 코드(10줄->2줄)
        const productService = new ProductService()
        const isSoldout = productService.checkSoldout()
    
        //2. 상품 환불하는 코드
        if(!isSoldout){
            res.send('상품을 환불합니다')
        }
    }
}
昨日のコードでは、buyProductredundProductで販売されているコードが同じであることを検証しました.
export class ProductController{
    constructor(moneyService, productService){
        this.productService = productService
        this.moneyService = moneyService
    }
}
私をクラスに入れた.
const productService = new ProductService()
const moneyService1 = new CashService() //new 한번으로 모든 곳에서 사용 가능 (싱글톤패턴)
const moneyService2 = new PointService() // 포인트결제 추가
緩やかな結合で放出することができる.しかし依存注入は必ずしもモノトーンモードではない.
図のように説明します.

これらはすべてNestjsで完了します.
->制御反転(Inversion Of Control,IoC).
松結合はDependenct-Injection,DI,スプリング,およびネストを用いた.

Nestjs


効率、信頼性、拡張性などの利点があります.
  • コラボレーションツールも一緒にインストールされています
    nest new project-name
    Npm i -g @nestjs/cli
  • コントローラおよびサービスは、モジュール内の
  • に組み合わされる.
  • モジュールを導入後に入れる、すなわち既に2つのモジュール
  • がある.
  • import { AppModule } from './app.module'; どうして
  • しかしないの?
  • ->自動注入依存性

    Typescript

    //문자타입 - 타입추론
    let aaa = "안녕하세요" //처음 잡힌 타입으로 설정됨
    // aaa = 3 //숫자라서 불가능
    aaa = "반갑습니다"
    
    //문자타입
    let bbb: string = "반갑습니다"
    bbb = "반가워요"
    bbb = 123
    
    //숫자타입 
    let ccc = 5
    ccc=10
    ccc="dd"
    
    //불린타입
    let ddd : boolean = true
    ddd = 11
    ddd = "22"
    
    //배열타입
    let eee = [1,2,3,4,5]
    let fff : String[] = ["c", "d"]
    let ggg : (number| string)[]= [1, "ccc", 3, "33"]
    let money : number[] | string[] = [1000, 2000, 3000]
    
    
    //객체타입
    interface Iprofile{
        name: string
        age: number | string
        school: string
    }
    let profile: Iprofile ={ //Interface의 Iprofile 선언해서 넣어주기
        name: "철수",
        age: 13,
        school:"다람쥐초"
    }
    profile.age = "13살"//하고싶으면 타입추론되게 하지말고 타입을 직접 만들어줘야함
    
    //함수타입
    function qqq(a:number, b:number) : string {// 리턴값도 선언해줌
        // return a+b
        return "ggg"
    }
    const result = qqq(1, 2)
    このように事前にタイプを指定します.

    @Decorator


    1つの設計モードでは、実行したいユーザーが構造を変更せずに既存のオブジェクトに新しい機能を追加できるようにします.関数定義の前に呼び出されます.
    function zzz(aa){
        console.log('--------')
        console.log(aa)
        console.log('--------')
    }
    
    @zzz
    class AppController{
    
    }
    実行時、AppControllerクラスの上にdecorator aaaクラスが記述され、AppControllerクラスが関数のパラメータとしてaaa内部で使用される.