클라이언트가 사용하지 않는 인터페이스를 구현하도록 강요해서는 안 됩니다.
이는 인터페이스가 작고 구현 클래스의 요구 사항에 맞게 구체적이어야 함을 의미합니다.
예:
❌나쁨
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();
감사합니다 :)))
위 내용은 [PART A SOLID Typescript에 대한 간략한 소개]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!