用于创建JavaScript框架的体系结构

用于创建JavaScript框架的体系结构,javascript,architecture,frameworks,Javascript,Architecture,Frameworks,大约一年前,我们启动了一个网络系统,随着时间的推移,这个系统已经发展了很多。从一开始,我们的目标就是构建可重用代码,以加速未来项目的开发。对于每一个新项目,都会从以前的项目中获取可重用的代码并在此基础上构建 目前,服务器端代码非常干净,在“框架”(通用功能)和特定于项目的逻辑之间有明确的分离 然而,javascript已经失控。对于特定于页面的javascript(按钮事件、ajax调用等),我们使用了闭包和。但是javascript公共文件(我们在每个页面中导入的文件)充满了函数,除了名称上的

大约一年前,我们启动了一个网络系统,随着时间的推移,这个系统已经发展了很多。从一开始,我们的目标就是构建可重用代码,以加速未来项目的开发。对于每一个新项目,都会从以前的项目中获取可重用的代码并在此基础上构建

目前,服务器端代码非常干净,在“框架”(通用功能)和特定于项目的逻辑之间有明确的分离

然而,javascript已经失控。对于特定于页面的javascript(按钮事件、ajax调用等),我们使用了闭包和。但是javascript公共文件(我们在每个页面中导入的文件)充满了函数,除了名称上的一些相似之处之外,它们之间没有任何关联

正因为如此,我现在正试图构建一种框架(易于重用和维护的代码),封装我们已经拥有的逻辑和功能。它应该是一个“核心”对象和几个可选的“扩展”。它们将在单独的文件中,以改进代码的顺序。具体而言,我正在努力实现以下目标:

  • 封装代码以防止名称冲突。我们对封闭区的公私分离感到非常满意
  • 可扩展的功能,类似于。这里棘手的部分是,扩展可能希望访问核心的私有方法
我已经阅读了很多关于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()) { ... }
        }
    }
}());

只需从框架模块返回一个函数

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都是公开的,而不仅仅是扩展。这是可行的,但我会等几天,看看是否有更好的选择。