不應強迫客戶端實作他們不使用的介面。
這意味著介面應該很小並且特定於實現類別的需求。
例如:
❌不好
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 { } }
基於介面的強度,一個類別可以實作多個介面。您應該將介面分成更小的部分,以更好地滿足您的班級的需求
*高階模組不應依賴低階模組。兩者都應該依賴抽象。
*
此原則鼓勵使用依賴注入
例如:
❌不好
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中文網其他相關文章!