单身人士被认为是不好的练习,角度是基于单身人士。角度不好吗?

时间:2015-07-20 14:34:27

标签: javascript angularjs design-patterns singleton

Angular的所有服务都是单身人士。众所周知,单身人士是不好的做法。

我知道许多人(包括我)对Angular非常满意。 我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

Singleton仍然是一个超级有用的模式,在这个帖子中指出了缺点:

What is so bad about singletons?

  

它们通常用作全局实例,为什么这么糟糕?   因为您隐藏了应用程序的依赖关系   代码,而不是通过接口公开它们。做点什么   全局避免传递它是代码气味。

     

他们违反了单一责任原则:借助于   事实上,他们控制着自己的创造和生命周期。

     

它们固有地导致代码紧密耦合。这使得伪造   在许多情况下,他们在测试中相当困难。

     

它们在应用程序的生命周期中携带状态。另一个   因为你最终可能会遇到测试需要的情况   要订购,这对于单元测试来说是一个很大的不。为什么?因为每一个   单元测试应该独立于另一个。

批评的大部分内容似乎都指向一种非常老式的单身人士模式的实施,它们是在全球范围内创造出来的:

public class ClassicSingleton {
   private static ClassicSingleton instance = null;
   protected ClassicSingleton() {
      // Exists only to defeat instantiation.
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

使用依赖注入容器(如角度或弹簧)克服了上述大多数异议。容器处理生命周期并将单例实例注入客户端代码。您始终可以将注入的单个替换为不同的单个用于测试目的。

简而言之,使用DI容器可以轻松使用单例,而不会产生潜在的不良影响。