首页 > 解决方案 > Angular 服务文件中的函数式编程实践

问题描述

看起来 Angular 很大程度上基于具有类、继承等的 OOP 范式。但是,在服务文件中,有很多功能。一些函数调用其他一些函数来实现业务逻辑。数据几乎来自组件函数传递的参数。可能我正在做的项目并不完全是OOP,因为模型只包含模型字段,所以模型中没有任何功能。从以上几个方面,我考虑将FP(函数式编程)实践应用到纯函数、不变性等服务文件中……因为服务文件只是具有很多功能的类。但是,一旦我创建了一个管道函数,我的同事就说在“当前”OOP 范式上阅读该函数很奇怪而且很难

function pipe(...fns) {
    return data => fns.reduce((v, f) => f(v), data);
}

并像这样使用它

const value = pipe(foo1,foo2(x),foo3)(data);

你认为这是一个好习惯吗?这是否会使我的项目 OOP 与 FP 混合在一起?

标签: typescript

解决方案


由于Service是 Angular 生态系统中已经保留的名称,我喜欢将此文件命名为UtilitiesUtils

有非常有用且易于阅读和测试,有时它们可​​以承载我项目的重要部分。

例如date.utils.ts,它将携带我在项目中需要的所有日期实用程序,或者更深入car.utils.ts地为实体提供一些有用的功能。

但是,这里有一些缺点:

  1. 很难保持状态和控制数据流。如果你尝试,它可能比它应该的更复杂。
  2. 你不会通过DI,所以如果你需要注入依赖项,你必须将它们作为参数传递,这最终会很丑陋。

推荐阅读