【发布时间】:2015-08-25 18:50:17
【问题描述】:
大约一年前,我们启动了一个网络系统,随着时间的推移,该系统已经发展了很多。从一开始,目标就是构建可重用的代码,以加速未来项目的开发,而且它确实做到了。对于每个新项目,都采用了以前的可重用代码并在此基础上进行构建。
目前,服务器端代码非常干净,“框架”(通用功能)和项目特定逻辑之间有明显的分离。
但是,javascript 已经失控了。对于页面特定的javascript(按钮事件、ajax 调用等),我们一直在使用闭包和the module pattern。但是 javascript 通用文件(我们在每个页面中导入的文件)充满了功能,除了名称上的一些相似之处之外,它们之间没有任何关联。
因此,我现在正在尝试构建一种框架(易于重用和可维护的代码),封装我们已有的逻辑和功能。它应该是一个“核心”对象和几个可选的“扩展”。它们将位于单独的文件中以改进代码的顺序。具体来说,我正在努力实现以下目标:
- 封装代码以防止名称冲突。我们对关闭的私人/公共分离感到非常满意。
- 可扩展功能,类似于open/close principle。这里的棘手部分是扩展可能想要访问核心的私有方法。
我在 javascript 中阅读了很多关于 OO 的内容,我什至尝试了解 jQuery 是如何做到的,但我仍然无法理解它。对于架构方面,我似乎应该构建一个模块或服务框架,但我发现的那些比我想要实现的要复杂得多。
如果不是前面提到的棘手部分,一个简单的$.extension() 就可以了,但我陷入了如何从扩展访问核心私有方法部分。简而言之,我的问题是:在 javascript 中是否有推荐的架构来构建类似以下示例的内容?
var framework = function () {
//Private variable
var internalState = 1;
//Private method
var validState = function () { ... }
//Public methods
return {
commonTask1: function () { ... },
commonTask2: function () { ... }
}
}();
framework.addMoreFunctionality(function () {
var specificData = '';
return {
extensionMethod: function () {
//TRICKY PART HERE
if (core.validState()) { ... }
}
}
}());
【问题讨论】:
标签: javascript architecture frameworks