我有一套简单的工具方法,没有任何状态可以在应用程序中共享,不需要是单例,也不需要任何注入服务。
使用注射服务是否有任何好处:
@Injectable()
export class DateService {
public convertStringToDate(input: string): Date {
…
}
public convertDateToString(date: Date): string {
…
}
…
}
与一组简单的导出/导入功能(或基本JS模块)?
export function convertStringToDate(input: string): Date {
…
}
export function convertDateToString(date: Date): string {
…
}
…
我正在研究混合这两种方法的应用程序,而且我对彼此的优势感到困惑。
答案 0 :(得分:4)
如果某项服务没有任何状态,则无需创建该服务。
导出函数的优点是,在构建过程中,如果不使用其中一个函数,则可以删除代码。
如果您的应用程序有多个代码包并且它们是懒惰加载的,并且您在不同的包中使用不同的函数,那么这些函数将与该包一起延迟加载。
如果您确信您的功能将始终独立使用,那么我将采用第二种方法。 RxJS例如由于我所说的原因,我采用了功能方法。
使用服务的一个论点是测试。如有必要,您可以在测试期间轻松注入虚假服务或代理。但我想这对于转换功能来说几乎没有必要。
答案 1 :(得分:1)
在你的情况下,我认为要么比另一个有优势。因为它不需要包含状态,所以没有真正的差异。
如果在应用程序中加入延迟加载,可能会在性能方面有一些优势,因为在需要之前,您不会急切地加载包含该服务的模块。但除此之外,没有。
答案 2 :(得分:0)
@Injectable在多个组件具有conman功能时使用,并且您不想多次声明,只需在@Injectable组件中声明它并使用任何组件。
答案 3 :(得分:0)
如果您只想将日期转换为字符串,我建议您使用JavaScript Date API或Angular DatePipe。
无论如何,如果你只需要静态方法,那么使用服务就没有优势。服务用作组件和服务器之间的层,以便检索和对象,存储它们并管理它们。 将辅助函数存储在可以从任何地方访问的额外TypeScript文件中是有意义的。