Heim >Web-Frontend >js-Tutorial >[Teil A: Kurze Einführung in SOLID Typescript
Clients sollten nicht gezwungen werden, Schnittstellen zu implementieren, die sie nicht verwenden.
Das bedeutet, dass Schnittstellen klein und spezifisch auf die Bedürfnisse der implementierenden Klasse abgestimmt sein sollten.
Zum Beispiel:
❌Schlecht
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"); } }
✅Gut
interface Workable { work(): void; } interface Eatable { eat(): void; } class Developer implements Workable, Eatable { eat() {} work(): void { } }
Basierend auf der Stärke der Schnittstelle kann eine Klasse mehrere Schnittstellen implementieren. Sie sollten die Benutzeroberfläche in kleinere Teile unterteilen, um den Anforderungen Ihrer Klasse besser gerecht zu werden
*High-Level-Module sollten nicht von Low-Level-Modulen abhängen. Beide sollten von Abstraktionen abhängen.
*
Dieses Prinzip fördert die Verwendung der Abhängigkeitsinjektion
Zum Beispiel:
❌Schlecht
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(); } }
Im Codeausschnitt gibt es mehrere Probleme. Das wichtigste Problem, das Sie sehen können, ist jedoch:
✅Gut
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();}); } }
High-Level-Modul hängt von Abstraktionen ab (Entwicklerschnittstelle).
Low-Level-Module implementieren die Abstraktion.
Durch die lose Kopplung lässt es sich leicht erweitern und warten.
MobileDev hinzufügen:
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();
Vielen Dank :)))
Das obige ist der detaillierte Inhalt von[Teil A: Kurze Einführung in SOLID Typescript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!