这个问题是关于使用服务器上的JS模块构建数据对象以供另一个模块使用的最佳实践。
我们有许多用于Web应用程序的模块,例如登录视图,表单处理程序,其中包含不同的数据片段,如用户状态,应用程序状态等,我们需要将这些模块发送到需要特定对象的分析套件格式。我们应该在哪里映射数据? (选择我们要发送的内容,重命名密钥,删除不需要的值。)
我的团队分为正确设计。我很好奇是否有一些权威话题可以帮助我们解决这个问题。
提前致谢!
例如,
var objectForAnalytics = {
logged_in: user.get('isLoggedIn'),
app_context: application.get('environment')
};
analytics.send(objectForAnalytics);
此简短示例脚本使用3个模块中的函数。在一个组织良好的应用程序中它应该存在于哪里?
答案 0 :(得分:0)
JS在传统意义上没有进行编组。
由于该语言鼓励鸭子打字并在一个VM中运行所有已加载的模块,因此每个模块都可以简单地传递数据并让消费者选择他们感兴趣的字段。
Marshaling历史上有两个主要目的:
JavaScript使用JSON解决了第二个问题,但第一个问题是使用字典样式的对象固有地解决了。传递具有1000个键的对象与具有2个对象的对象一样快,因此您可以(并且经常被鼓励)简单地向消费者提供您拥有的内容并允许他们决定他们需要什么。
在诸如Typescript之类的语言中进一步强化了这一点,其中参数类型的契约只是最小要求集。 TS允许您传递超过这些要求的对象(通过其他字段),而只是验证您是否知道他们在合同中要求的消费者状态并且已经满足。
如果您确实需要转换对象,可能是因为两个库使用不同键的相同数据,创建一个带有浅引用的新对象非常简单:
let foo = {
bar: old.baz,
baz: old.bin
};
这不会更改或复制基础数据,因此对原始(或副本)的任何更改都将传播到另一个。这不包括原始值,它们是不可变的,因此不会传播。