クライアントは、使用しないインターフェースの実装を強制されるべきではありません。
これは、インターフェイスが小さく、実装クラスのニーズに特化している必要があることを意味します。
例:
❌悪い
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 つのクラスで複数のインターフェースを実装できます。クラスのニーズに合わせてインターフェースをより小さな部分に分割する必要があります
*高レベルのモジュールは低レベルのモジュールに依存しないでください。どちらも抽象化に依存する必要があります。
*
この原則により、依存性注入の使用が推奨されます
例:
❌悪い
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(); } }
コードのスニペットには複数の問題があります。しかし、最も重要な問題は次のとおりです。
✅良い
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 サイトの他の関連記事を参照してください。