【发布时间】:2023-03-12 04:15:01
【问题描述】:
我使用 Typescript 和 NestJS 框架创建了一个大型项目,我想在 OOP 架构中创建这个项目,我有一个关于它的重要问题。我想创建一个具有公共功能的基础服务,该功能将在项目中的几乎所有服务中使用,并且我有两种使用公共部分的方法。
首先是创建一个具有公共方法的抽象类,如下所示:
export abstract class BaseService {}
并在目标服务中继承这个抽象类:
export class UserService extends BaseService {}
多亏了这一点,我可以使用 BaseService 中存在的所有方法,使用 this 关键字并创建对该函数的引用。
但我有第二种方法,通过 constrcutor 使用注入服务:
export class BaseService {}
并通过构造函数注入:
export class UserService {
constructor (
private readonly baseService: BaseService
){}
someMethod(): void {
return baseService.getHelloWorld();
}
}
通过这种方式,我可以通过注入服务创建引用严格。
现在我有一个问题。在大型项目中哪种方法更好?
PS。我更喜欢在方法而不是类上创建基于<T> 的通用函数
【问题讨论】:
-
一般规则始终是“优先委托而不是继承”。
-
所以当我应该使用继承和/或抽象类/
-
我同意@WiktorZychla。回答你的问题 > 所以当我应该使用继承和/或抽象类/理想情况下,永远不要
-
继承是一种严格的耦合。重构的痛苦。委托更安全,因为您可以将注入的实体声明为抽象的,并且只在组合时使用实际的具体类型。整个 DI 建立在此之上。
标签: node.js typescript oop nestjs