typescript - 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 混合在一起?
解决方案
由于Service是 Angular 生态系统中已经保留的名称,我喜欢将此文件命名为Utilities或Utils。
有非常有用且易于阅读和测试,有时它们可以承载我项目的重要部分。
例如date.utils.ts
,它将携带我在项目中需要的所有日期实用程序,或者更深入car.utils.ts
地为实体提供一些有用的功能。
但是,这里有一些缺点:
- 很难保持状态和控制数据流。如果你尝试,它可能比它应该的更复杂。
- 你不会通过DI,所以如果你需要注入依赖项,你必须将它们作为参数传递,这最终会很丑陋。
推荐阅读
- react-native - 生产模式下的 babel-plugin-transform-remove-console React Native
- c# - 将 RichTextBox 中的彩色文本保存为 pdf
- php - 如果密钥已被使用,则显示“密钥已被使用”
- java - 当小时和分钟变量低于零时, moveForward(lostTime) 应该如何给出正确的输出?
- mysql - MySQL 说:#1064 - 你的 SQL 语法有错误;
- spring-boot - Heroku 上的 Keycloak 服务器
- node.js - 如何对使用 filestream 和 pngjs 创建的文件进行处理?
- c# - ASP。Net 应用程序在指定的路由 url 下工作正常,但在 http://locahost 上不工作
- wordpress - 是否有在对象或数组中获取 wp 菜单的功能?
- node.js - 使用 fs 检查 node.js 中是否存在另一个文件夹中的内容