[第二部分] 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 {
}
}基于接口的强度,一个类可以实现多个接口。你应该将接口分解成更小的部分,以更好地满足你的类的需求
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();
}
}在代码片段中,存在多个问题。但是,您能看到的最重要的问题是:
✅好
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();谢谢 :)))