重构javascript。解耦标记或单独的模块

时间:2011-10-10 01:10:02

标签: javascript refactoring

我正在努力使一个大的(~10K行)javascript代码库更易于维护。几乎所有的代码都包含在一个庞大的类中。我想做一些重构,但我不想完全重写代码。

我有两个关于如何重新组织代码的想法,但我不确定哪个是最好的。 (我对其他想法也很开放)你对这些方法有什么看法?你怎么决定哪个最好?

创意1 - 从业务逻辑中解耦标记。 对于用户应该向用户显示的内容和方式,我们有一套复杂的规则。这种方法将其划分为“我们展示什么?”和“我们如何展示它?”

创意2 - 将单独的组件拆分为自己的类。 这段代码中有几个不相交的组件。如果这个代码库是Facebook的 - 这种方法将涉及拆分照片和新闻源的代码。

3 个答案:

答案 0 :(得分:1)

回答你的问题:是的。

我不确定你的意思是'重构,但不能重写'。重构代码不应该改变外部行为,但重构肯定会涉及某种移动代码和诸如此类的东西。

通常,将标记与业务逻辑分离是一个好主意:它遵循model-view-controller pattern,有效地使您的标记代码“查看”代码和业务逻辑“控制器”代码。

将代码拆分为单独的组件同样是一个好主意。将代码分解为单独的类支持了具有高内聚和低耦合的类的想法,并且通常会使您转向更多SOLID object-oriented设计。

如果你问的是哪一个更有益,那是SO社区无法评估的东西,那是你必须要做的事情。

答案 1 :(得分:1)

如果我们谈论Javascript,您可能正在浏览器中使用它。在这种情况下,您的大部分代码都是关于视图的。 MVC模式对您没有多大帮助,因为您的大多数代码都会处理视图。

记住Javascript不是基于类的,而是基于原型的。它也很实用。功能编程擅长操作数据。这样做时尝试使用Javascript的功能方面。

我建议您尝试将项目拆分为一个通用框架,以便检索,操作和推送所有视图的数据;然后将您的视图代码拆分为组件。

如果我们谈论10k行,你必须开发某种骨干来处理常见任务。如果您不使用jQuery,在重新组织代码之后,将您的实现与jQuery的解决方案进行比较,如果您看到改进,则可以在代码内部开始重构。

如果您有机会看一下Ext JS源代码:http://www.sencha.com/products/extjs/download/ext-js-4.0.2a/213

答案 2 :(得分:0)

过度简化,您需要首先从技术角度弄清楚您所需的架构定义是什么。您的文件(高级)负责什么,您的低规模模块是什么,以及它们将如何进行通信(直接或替代)。你应该在这个阶段抽象出外部框架吗?我是EDA(事件驱动架构),分形层次结构和调解(中介模式)的粉丝,但存在许多其他定义。选择一个适合您项目规模的项目,并可以扩展。

获取蓝图和程序,了解您如何从A到B获取架构。您可能希望抽象过程引入约定。例如," Redundancies:使用装饰器"等等。你喜欢作文而不是继承吗?但是,您应该有一个具体程序来了解如何执行您的游戏计划。例如:"将参考文献替换为' X'使用Mediator","让Save()在'验证'上发送信号。频道"等。

确保您使用JavaScript合成精确地反映您的观点。因为平衡不平行的等级制度总是很痛苦 - 这总是导致熵。并尝试接受(如上所述)SOLID原则。

我希望详细说明,但我希望这对你来说是一个好的开始。