在JS模块之间进行数据封送的好模式是什么?
What is a good pattern for data marshaling between JS modules?
这个问题是关于在服务器上使用JS模块构建数据对象以供另一个模块使用的最佳实践。
我们有许多web应用程序模块,如登录视图,表单处理程序,包含不同的数据片段,如用户状态,应用程序状态等,我们需要将其发送到需要特定对象格式的分析套件。我们应该在哪里映射数据?(选择我们想要发送的东西,重命名键,删除不需要的值。)
- 在每个模块中。例如:Login了解分析及其格式要求。
- 在分析模块。现在分析人员必须知道关于每个模块的源格式。
- 在单独的[模块]-分析模块。然后我们就会有一打没有太多上下文的文件需要调试和理解。
我的团队在右设计上存在分歧。我很好奇在这个问题上是否有权威的声音可以帮助我们解决这个问题。
提前感谢!
例如,var objectForAnalytics = {
logged_in: user.get('isLoggedIn'),
app_context: application.get('environment')
};
analytics.send(objectForAnalytics);
这个简短的示例脚本使用了来自3个模块的函数。它应该存在于一个组织良好的应用程序的什么地方?
JS不做传统意义上的封送处理。
由于该语言鼓励鸭子类型并在单个VM中运行所有加载的模块,因此每个模块可以简单地传递数据并让消费者选择他们感兴趣的字段。
从历史上看,封送处理有两个主要目的:- 为另一个模块提供它期望的数据,因为c风格的结构和对象通常不支持额外的数据。
- 在两个编译器上构建的两种语言或模块之间传输数据,这可能使用不同的内存布局,调用约定或abi。
JavaScript使用JSON解决了第二个问题,但第一个问题本质上是用字典样式的对象解决的。传递一个有1000个键的对象和传递一个有2个键的对象一样快,所以你可以(经常被鼓励)简单地给消费者你所拥有的,让他们决定他们需要什么。
这在Typescript等语言中得到了进一步加强,其中参数类型的契约只是要求的最小集合。TS允许你传递一个超出这些要求的对象(通过其他字段),而不是仅仅验证你知道消费者在他们的合同中需要什么,并且已经满足了这些要求。
当您确实需要转换对象时,可能是因为两个库使用具有不同键的相同数据,创建具有浅引用的新对象非常容易:
let foo = {
bar: old.baz,
baz: old.bin
};
这不会更改或复制底层数据,因此对原始(或副本)的任何更改都会传播到另一个。它不包括原始值,这些值是不可变的,因此不会传播。
相关文章:
- 不确定我在PHP AJAX中使用的是什么开发模式
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- 在Backbone.js'上设置属性的模式是什么;模型和视图
- 使用 ES6 模块而不是显示模块模式的额外优势是什么?
- 在 Node.js 中表示状态的普遍接受模式是什么?
- 在vimperator中手动切换到“提示”模式的命令是什么
- 从嵌套数组中获取唯一元素的 JS 模式是什么
- 创建新模型的正确控制器/视图模式是什么
- 在javascript中拆分字符串的正确模式是什么,只留下a-z个单词
- 最好的1-1聊天模式是什么?(AJAX/CI/JQ)
- 使用生成器和迭代器管理流的正确模式是什么
- 文本的正确模式是什么
- 在这个Backbone TodoMVC示例中,这些模式是什么?
- 双64位最小值的位模式是什么?
- 在jquery插件中添加简单的公共方法的最佳模式是什么?
- 在JS模块之间进行数据封送的好模式是什么?
- 开发服务器端node.js的良好架构/模式是什么?
- 这个javascript语法/模式是什么意思
- 执行一段时间后重复的函数的良好模式是什么
- 在JavaScript中,这种情况下的首选模式是什么?