【发布时间】:2013-08-10 10:07:54
【问题描述】:
现在我正在开发非常庞大和复杂的 webapp,并且必须处理大量的客户端 js 代码,为了让我的生活更轻松,我正在尝试尽可能多地解耦这些代码。
Nicholas Zakas (http://www.youtube.com/watch?v=vXjVFPosQHw) 和 Addy Osmani (http://addyosmani.com/largescalejavascript) 谈到可扩展的 js 架构时深受启发,并试图将他们的一些想法应用到我的工作中。
我已将我的所有代码分离到多个独立模块中,并与某种中介处理所有的相互通信。这种方法在大多数情况下效果很好。但在某些情况下,我认为还不够。
我正在研究的一个模块代表了一个非常复杂的类似列表的结构。这里有一些简化的例子:
除了一些渲染逻辑,负责这块页面的模块应该处理:
- 分页
- 切换组
- 使用 dnd 移动元素和组
- 剪切/复制/粘贴元素和组
- 刷新某些组/元素
- 元素中的一些逻辑
- 在不久的将来可能会有更多的东西
我已经执行了所有我可以执行的无关逻辑(例如编辑和删除逻辑通过事件执行到另一个模块),但是模块大小仍然很大(超过 1K 行代码),我不知道如何减少它。此外,我为我的模块使用模块模式,因此在多个文件之间分离逻辑更加困难。
所以我来这里问有没有办法将复杂的逻辑解耦在单个模块中?
更新:
我想澄清一些事情。我非常清楚如何在我的代码中的多个文件中分离模块(“模块”来自模块模式)。
但我真正寻找的是新的逻辑在单个模块中分离关注点的方法(NKZ 演示中的“模块”)。
【问题讨论】:
-
你的问题有点含糊,但总的来说,你可以把一个模块当成一个程序,在模块的围墙内你可以创建子模块、类、类型和纯函数来帮助减少混乱。由于内部程序循环减少,独立模块通常相对昂贵;例如:与 jQuery 插件相比,独立的列表排序器。模块总比乱七八糟的好,所以你走在正确的轨道上。可能需要掌握依赖注入和控制反转的概念才能将您的脚本提升到一个新的水平。
-
嗨,这有点晚了,但可能会有所帮助。 pogsdotnet.blogspot.sg/2017/07/…
标签: javascript architecture module scalability decoupling