传递对象与单身人士

时间:2012-02-22 14:26:21

标签: oop singleton

据我所知,如何处理应用程序范围的角色扮演器对象(如根模型对象)(在MVC上下文中)有两个主要原则:

  1. 创建对象并将其传递通过对象树(例如在构造函数中)
  2. 将其作为单身或其他全局变量技术提供
  3. 第一种方法似乎更清晰,因为依赖关系更容易看到,但还有很多额外的工作要做(参数,类变量......)。

    你更喜欢什么?

    编辑:第一种技术也只使用一个实例,但它是通过传递对象而不是通过静态函数提供的

3 个答案:

答案 0 :(得分:2)

我更喜欢运行单身人士的方法getInstance()作为构造函数参数 - 一石二鸟;)

答案 1 :(得分:1)

我认为传递参数更有效,更容易调试,但还需要一些额外的工作。

我更喜欢在我真正需要它时使用单身(如数据库会话,写入文件等)。

这实际上取决于项目类型,语言,预算,项目规模等。没有“普遍”的答案。

答案 2 :(得分:1)

这是依赖注入可以帮助的地方。必须在创建对象时手动将所有正确的依赖项手动传递给对象,这可能会很麻烦,并且可能有些容易出错。一个合适的依赖注入容器可以帮助自动化这个过程,实际上比单例更容易使用。

Symfony2框架是一个现代的例子:

http://symfony.com/doc/current/book/service_container.html