用于创建JavaScript框架的体系结构
大约一年前,我们启动了一个网络系统,随着时间的推移,这个系统已经发展了很多。从一开始,我们的目标就是构建可重用代码,以加速未来项目的开发。对于每一个新项目,都会从以前的项目中获取可重用的代码并在此基础上构建 目前,服务器端代码非常干净,在“框架”(通用功能)和特定于项目的逻辑之间有明确的分离 然而,javascript已经失控。对于特定于页面的javascript(按钮事件、ajax调用等),我们使用了闭包和。但是javascript公共文件(我们在每个页面中导入的文件)充满了函数,除了名称上的一些相似之处之外,它们之间没有任何关联 正因为如此,我现在正试图构建一种框架(易于重用和维护的代码),封装我们已经拥有的逻辑和功能。它应该是一个“核心”对象和几个可选的“扩展”。它们将在单独的文件中,以改进代码的顺序。具体而言,我正在努力实现以下目标:用于创建JavaScript框架的体系结构,javascript,architecture,frameworks,Javascript,Architecture,Frameworks,大约一年前,我们启动了一个网络系统,随着时间的推移,这个系统已经发展了很多。从一开始,我们的目标就是构建可重用代码,以加速未来项目的开发。对于每一个新项目,都会从以前的项目中获取可重用的代码并在此基础上构建 目前,服务器端代码非常干净,在“框架”(通用功能)和特定于项目的逻辑之间有明确的分离 然而,javascript已经失控。对于特定于页面的javascript(按钮事件、ajax调用等),我们使用了闭包和。但是javascript公共文件(我们在每个页面中导入的文件)充满了函数,除了名称上的
- 封装代码以防止名称冲突。我们对封闭区的公私分离感到非常满意
- 可扩展的功能,类似于。这里棘手的部分是,扩展可能希望访问核心的私有方法
$.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()) { ... }
}
}
}());
只需从框架模块返回一个函数
return {
isValidState: function() { ... }
commonTask1: function () { ... },
commonTask2: function () { ... }
}
然后,isValidState函数可以检查内部状态
// isValidState
function() {
if (validState()) {
return true;
}
return false;
}
然后通过调用core.isValidState()检查状态是否有效;这样,您就不会在框架核心中获得任何对任何“私有”变量的引用,因为函数返回bool,而不是对任何对象的直接引用。您研究过DOJO吗?它有一个模块系统、一个构建系统和一个非常复杂的OO框架。 您可以拥有自己的模块/“基本dijit”,它将帮助您实现“通用模块/小部件”,然后通过按照您描述的方式编写/添加特定功能来扩展每个项目
DOJO并不十分流行,但如果您的应用程序处理的是像interface这样的表单,那么它肯定是一个候选应用程序。感谢您的参考,我稍后会检查它,尽管此时迁移到框架可能需要太多的返工和测试。我正在寻找一种好的、正确的方法来重构现有代码的体系结构。这样,我就必须为我需要在扩展中看到的每个私有方法创建一个公共方法。。。像方法访问器一样。此外,尽管这可能不是问题,但这些访问器对任何javascript都是公开的,而不仅仅是扩展。这是可行的,但我会等几天,看看是否有更好的选择。