共计 1908 个字符,预计需要花费 5 分钟才能阅读完成。
download:极客测试开发进阶训练营 2022 年
面向对象设计的重要技巧:隔离
面向对象编程是当今软件开发中最罕用的办法之一,它次要依赖于类和对象来治理和组织代码。在实现简单零碎时,为了放弃代码的可扩展性、可维护性和可测试性,咱们须要采取一些要害技巧来缩小代码间的耦合性并进步代码的模块化。本文将介绍一个要害技巧:隔离。
什么是隔离?
在面向对象编程中,隔离是一种技术,意味着将不同的性能或模块拆散开来,以缩小它们之间的耦合度并进步代码的可重用性和可维护性。通过隔离,每个模块都能够独立运作,这样能够升高零碎的复杂度,并使更改和调试变得更加容易。
隔离的次要目标是将代码模块化,这样它们能够被独自开发、测试和保护。此外,隔离还能够帮忙咱们防止对代码的不必要批改,并且能够更好地处理错误和异常情况。
隔离的实现办法
接口隔离准则
接口隔离准则(Interface Segregation Principle,ISP)是面向对象编程中的一项要害技巧。该准则要求将一个大接口拆分成多个小接口,以便客户端只须要晓得它们须要应用的接口,而不须要晓得全副的接口。
例如,假如咱们有一个名为 Shape 的接口,定义了获取形态周长和面积的办法。如果咱们实现一个仅须要计算周长的类,则该类必须实现计算面积的办法,即便它不须要这个办法。这种状况下,咱们能够应用 ISP 将 Shape 接口拆分为两个更小的接口:Perimeter 和 Area。
interface Perimeter {
getPerimeter(): number;
}
interface Area {
getArea(): number;
}
繁多职责准则
繁多职责准则(Single Responsibility Principle,SRP)是另一个重要的隔离技术。该准则要求每个类或模块都应该有一个繁多的责任,并且应该只有一个起因引起它的变动。
例如,假如咱们有一个解决日志的类,并且咱们想要增加一个解决文件的性能。如果咱们将文件解决逻辑增加到 Log 类中,则违反了 SRP 准则。相同,咱们应该创立一个新的 File 类,专门负责文件解决。
依赖注入
依赖注入(Dependency Injection,DI)是另一个重要的隔离技术。该技术的次要思维是将一个对象须要的其余对象的创立和管理工作交给内部容器来实现,从而实现对象之间的解耦。
例如,假如咱们有一个名为 UserService 的类,它须要应用 DatabaseService 来获取用户数据。如果咱们间接在 UserService 中创立一个 DatabaseService 实例,则违反了 DI 准则。相同,咱们应该应用依赖注入框架(如 Angular、Spring 等)或手动 DI 办法,将 DatabaseService 实例注入到 UserService 中。
class UserService {
private databaseService: DatabaseService;
constructor(databaseService: DatabaseService) {
this.databaseService = databaseService;
}
getUser(userId: string): User {
return this.databaseService.getUser(userId);
}
}
组合优于继承
继承是一种强耦合的关系,因为它将子类与父类严密绑定在一起。组合则容许咱们将不同的类组合在一起,以实现更灵便和可重用的代码。
例如,假如咱们有一个名为 Car 的类,它有一个引擎类型,能够是电动的或燃油驱动的。如果咱们应用继承来实现电动车和燃油车,则这些子类将与 Car 严密绑定。相同,咱们能够应用组合来实现这个性能,创立一个 Engine 类,并在 Car 中应用它。
class Engine {
private type: string;
constructor(type: string) {
this.type = type;
}
getType(): string {
return this.type;
}
}
class Car {
private engine: Engine;
constructor(engine: Engine) {
this.engine = engine;
}
getEngineType(): string {
return this.engine.getType();
}
}
论断
隔离是面向对象编程中的要害技巧之一。它能够帮忙咱们缩小代码间的耦合度,并进步代码的可重用性、可维护性和可测试性。在实现隔离时,咱们能够应用接口隔离准则、繁多职责准则、依赖注入和组合优于继承等技术。通过这些技术,咱们能够创立更加模块化、灵便和可扩大的代码,最终实现更好的软件开发。