重构的javascript.解耦标记或分离模块
refactoring javascript. decouple markup or separate modules
我试图使一个大(~10K行)javascript代码库更易于维护。几乎所有的代码都包含在一个庞大的类中。我想做一些重构,但我不想完全重写代码。
关于如何重新组织代码,我有两个想法,但我不确定哪一个是最好的。(我对其他的想法也很开放)你对这些方法有什么看法?你怎么决定哪个是最好的?想法1 -从业务逻辑中分离标记。对于应该向用户显示什么以及如何显示,我们有一套比较复杂的规则。这种方法会把它分成"我们显示什么?"answers"我们如何显示?"
Idea 2 -将单独的组件分解成它们自己的类。在这段代码中有几个不太相关的组件。如果这个代码库是Facebook的代码库,那么这种方法将涉及将照片代码和新闻提要代码分开。
如果我们正在谈论Javascript,那么您很可能在浏览器中使用它。在这种情况下,大部分代码都是关于视图的。MVC模式对你的帮助不大,因为你的大部分代码都要处理视图。
记住Javascript不是基于类的而是基于原型的。它也是功能性的。函数式编程擅长处理数据。当这样做时,请尝试使用Javascript的函数方面。
我建议你试着把你的项目分成一个共同的框架来检索、操作和推送所有视图的数据;然后将视图代码拆分为多个组件。
如果我们谈论的是10k行,你必须开发某种骨干来处理常见任务。如果你没有使用jQuery,在重组你的代码后,将你的实现与jQuery的解决方案进行比较,如果你看到了改进,你可以开始在你的代码中重构。
如果你有机会看看Ext JS源代码:http://www.sencha.com/products/extjs/download/ext-js-4.0.2a/213
回答你的问题:是的。
我不确定你所说的"重构,但不是重写"是什么意思。重构代码不应该改变外部行为,但是重构肯定会涉及到代码的移动和诸如此类的事情。
一般来说,将标记与业务逻辑分离是一个好主意:它遵循模型-视图-控制器模式,有效地将标记代码变为"视图"代码,而将业务逻辑变为"控制器"代码。
将代码分解为单独的组件也是一个好主意。把你的代码分解成单独的类,可以支持拥有高内聚和低耦合的类的想法,并且通常会使你走向更坚实的面向对象设计。
如果你问哪一个更有益,这是SO社区无法评估的,这是你必须决定的。
过于简单,您需要首先弄清楚,用技术术语来说,您想要的架构定义是什么。你的主文件(高级)负责什么,你的低规模模块是什么,以及它们将如何通信(直接或间接)。在这个阶段应该抽象掉外部框架吗?我是EDA(事件驱动架构)、分形层次结构和中介(中介模式)的粉丝,但还有许多其他定义。选择一个适合您的项目规模并可以扩展的。
派生一个蓝图和过程,用于如何将架构从a转换到b。您可能希望抽象过程包含约定。例如,"冗余:使用装饰器"等等。你喜欢作曲还是喜欢继承?然而,你应该有一个具体的程序来执行你的游戏计划。例如:"用Mediator替换对'X'的引用","让Save()在'validation'通道上调度一个信号",等等。
确保你的JavaScript组合准确地反映了你的视图。因为平衡不平行的层次结构总是很痛苦——这总是导致熵。并尝试接受(上面提到的)坚实的原则。
我本想详细说明,但我希望这对你来说是一个好的开始。
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 如何附着分离的对象
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 如何使用jQuery each分离字符串中的元素
- 在Meteor项目中安装并包含npm模块后出错
- 如何定义一个模块并使用它来分离js文件
- 角度依赖注入,如果将控制器、服务等分离到单独的模块中
- 如何嵌套 React 组件/模块以分离 UI
- 如何分离文件中的角度模块和需要使用Browserify
- 重构的javascript.解耦标记或分离模块
- reuqure.js如何将主模块分离为子模块
- 模块内容和内部骨干方法之间的逻辑分离
- AngularJS:在分离的控制器之间包含模块
- 使用 Knockout.js / RequireJs 将 javascript “类”或“模块”与视图模型分离