首頁 > web前端 > js教程 > 【A部分SOLID Typescript簡介

【A部分SOLID Typescript簡介

DDD
發布: 2024-12-31 05:08:09
原創
973 人瀏覽過

[Part A Brief Introduction to SOLID Typescript

I-介面隔離原則(ISP)

不應強迫客戶端實作他們不使用的介面。

這意味著介面應該很小並且特定於實現類別的需求。
例如:

❌不好

interface Work{
    eat(): void;
    work(): void;
}

class Developer implements Work{
    eat() {
        console.log("eat");
    }
    work() {
        console.log("work");
    }
}
class Robot implements Work{
    eat() {
        throw new Error("eat"); // Robot does not need to inherit eat() method
    }
    work() {
        console.log("work");
    }
}
登入後複製

✅好

interface Workable  {
    work(): void;
}
interface Eatable {
    eat(): void;
}
class Developer implements Workable, Eatable {
    eat() {}

    work(): void {
    }
}
登入後複製

基於介面的強度,一個類別可以實作多個介面。您應該將介面分成更小的部分,以更好地滿足您的班級的需求


D - 依賴倒置原則(DIP)

*高階模組不應依賴低階模組。兩者都應該依賴抽象。
*

此原則鼓勵使用依賴注入
例如:

❌不好

class BackendDeveloper {
    develop(){
        console.log("Developing developer");
    }
}
class FrontendDeveloper {
    develop(){
        console.log("FrontendDeveloper");
    }
}
class Project {
    backendDeveloper: BackendDeveloper;
    frontendDeveloper: FrontendDeveloper;
    constructor() {
        this.backendDeveloper = new BackendDeveloper();
        this.frontendDeveloper = new FrontendDeveloper();
    }
    build(){
        this.backendDeveloper.develop();
        this.frontendDeveloper.develop();
    }
}
登入後複製

在程式碼片段中,存在多個問題。但是,您可以看到的最重要的問題是:

  • 如果你想加入MobileDeveloper(),你需要修改Project(),這會影響其他使用它的方法
  • Project() 與 backendDeveloper 和 frontendDeveloper 緊密耦合

✅好

interface Developer {
    developer(): void
}
class BackendDev implements Developer {
    developer() {
        console.log("Developer Developer");
    }
}
class FrontendDeveloper implements Developer {
    developer() {
        console.log("Developer Developer");
    }
}
class Project {
    constructor(private developers: Developer[]) {
    }
    build(){
        this.developers.forEach(developer => {developer.developer();});
    }
}

登入後複製

高階模組依賴抽象(開發者介面)。
低階模組實作抽象。
松耦合使其易於擴展和維護。

新增 MobileDev:

class MobileDeveloper implements Developer {
  develop() {
    console.log("Writing mobile code");
  }
}

// Usage
const developers: Developer[] = [
  new BackendDeveloper(),
  new FrontendDeveloper(),
  new MobileDeveloper(), //easy to add and make it does not change in Project()
];
const project = new Project(developers);
project.build();

登入後複製

謝謝你:)))

以上是【A部分SOLID Typescript簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板