在Typescript中导出可测试函数的适当类设计是什么?

时间:2017-09-27 03:35:56

标签: node.js typescript

我有几个无状态类可以执行一些业务逻辑并返回一些计算。他们中的每一个都有其他类的依赖。

现在我有两种设计:

  1. 有一个类,其中每个方法都是静态方法。我可以使用jest import mocking来覆盖测试的依赖项。优点是你只有一个类实例。

  2. 拥有一个使用常规非静态方法的类。这将需要在使用它的每个地方实例化类。我可以在构造函数中传入类依赖项。测试这非常简单。缺点是你在代码中创建了多个类实例和潜在的依赖项。

  3. 其中哪一种是首选的惯用TS方法?

    还有使用IoC容器的经典解决方案,但我想避免这种情况,因为这个应用程序相当小,并且不想添加额外的膨胀。

    此外,不想一直导出纯函数和放弃类,因为这意味着我将失去类的自动导入(在VSCode中)。

1 个答案:

答案 0 :(得分:0)

  

此外,不想一直导出纯函数和放弃类,因为这意味着我将失去类的自动导入(在VSCode中)。

你能解释一下这是什么"自动导入类(在VSCode中)"?在VSCode中,我使用TypeScript Importer等扩展程序为任何类型添加适当的导入(classfunctionliteral ...),不仅仅是类。

无论如何,IMO,它是纯粹的功能"方法是更惯用的JavaScript,至少对那些喜欢JavaScript函数编程功能的人(包括我)来说。它对TypeScript也是如此,即使它对类和C#/类似Java的面向对象编程表示同情。

如果你真的喜欢上课,请避免静态,即选项#1。您可以在引导应用程序时实例化和共享实例(就像DI容器一样)以避免多实例。

类之间的耦合在TypeScript中不是问题,因为它的结构类型:类可以充当接口→如果类A依赖于类B,则可以始终向类A实例提供类B类对象。