【问题标题】:When to use a singleton?什么时候使用单例?
【发布时间】:2010-08-02 11:55:18
【问题描述】:

我有这个代码:

class MyController {
public function newUserAction()
{
    $view = new View('myfrontend');
    if($this->request->isPost())
    {
        $form = new MyForm;
        $posts = $this->request->getPosts();
        if($form->isValid($posts))
        {
            //...
        }
    }
    $view->display();
}

}

所以,每次表格填写不正确时,流程都会重新开始,因此每次出现“新视图('myfrontend')”等时。但这是一件好事吗?一次又一次地拥有一个新的视图对象。

在这里使用单例不是更好吗?

【问题讨论】:

标签: php model-view-controller singleton controller


【解决方案1】:

永远不会。就这么简单。

当您再次显示无效表单时,无论如何都必须重新提交。这将是一个全新的请求。应用程序将通过完整的引导和调度。单例在这里没有帮助,因为 PHP 中的单例也只会为请求而存在。

另外,Singletons are much more difficult to test。我还没有遇到过使用Dependency Injection 时无法避免单例的用例。即使是单例模式的发明者之一Erich Gamma,如今也对这种模式表示怀疑:

"I'm in favor of dropping Singleton. Its use is almost always a design smell"

你最好避免单身。

【讨论】:

    【解决方案2】:

    如果一个对象实际上不需要多次实例化,请考虑使用静态方法声明一个类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多