ホームページ > ウェブフロントエンド > jsチュートリアル > [パート A SOLID Typescript の簡単な紹介]

[パート A SOLID Typescript の簡単な紹介]

DDD
リリース: 2024-12-31 05:08:09
オリジナル
972 人が閲覧しました

[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 {
    }
}
ログイン後にコピー

インターフェースの強度に基づいて、1 つのクラスで複数のインターフェースを実装できます。クラスのニーズに合わせてインターフェースをより小さな部分に分割する必要があります


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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート