0

我需要有关如何将常用功能编程到我的 JavaScript 应用程序中的建议。例如,有这些类:Main、Logger、App 和 Template。

Main 创建一个 App 和 Logger 的实例,然后 App 创建一个 Template 的实例。Main 将自身的引用传递给 App 的 init,App 将 Main 的引用传递给 Template 的 init。现在,无论对错,Template 都直接引用了 Main 中的 Logger 实例。这是最简单的,但它似乎不是正确的 OOP,因为对记录器的任何更改都需要对调用引用的每个类进行重复编程。

或者,Template 可以只接收对 App 的引用,该引用有一个方法来调用它对 Main 的引用,它有一个方法来调用它的 Logger 实例。这似乎更安全,可以让每个人都远离,但这也意味着 Main 将充满方法来访问 Logger 和它管理的其他类。

这里没有详细说明:我正在使用 John Resig 的 Simple JavaScript Inheritance 和 RequireJS。

示例 1:

var Main = {
  init: function() {
    this.logger = new Logger();
    this.app = new App(this);
  }
}

var Logger = {
  debug: function(message) { 
    console.log(message) 
  }
}

var App = {
  init: function(main) {
    this.template = new Template(main);
  }
}

var Template = {
  init: function(main) {
    main.logger.debug("Hello");
  }
}

示例 2:

var Main = {
  init: function() {
    this.logger = new Logger();
    this.app = new App(this);
  }
  ,debug: function(message) {
    this.logger.debug(message);
  }
}

var Logger = {
  debug: function(message) { 
    console.log(message);
  }
}

var App = {
  init: function(main) {
    this.main = main;
    this.template = new Template(this);
  }
  ,debug: function(message) {
    this.main.debug(message);
  }
}

var Template = {
  init: function(app) {
    app.debug("Hello");
  }
}
4

1 回答 1

0

我发现在使用 JavaScript 的 OOP 项目中使用依赖注入模式和事件总线模式非常有用。如果您使用MVCMVP解耦逻辑,它对单元测试也有很大帮助。

于 2012-05-25T19:26:06.193 回答