Singleton的替代方案是什么

我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。

没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。


Qyouu
浏览 649回答 3
3回答

呼啦一阵风

在谷歌测试博客有一系列的关于避免(以创建可测试的代码)辛格尔顿条目。也许这可以帮助您:使用依赖注入避免单例单身人士是病态的骗子单身人士的根本原因单身人士去哪儿了?上一篇文章详细解释了如何将新对象的创建移入工厂,因此可以避免使用单例。值得一读。简而言之,我们将所有新的操作员移至工厂。我们将寿命相似的所有对象归为一个工厂。

慕后森

不要累积对单个配置对象的责任,因为它会以难以理解且脆弱的非常大的对象结尾。例如,如果您需要特定类的另一个参数Configuration,则可以更改对象,然后重新编译使用该对象的所有类。这有些问题。尝试重构您的代码,以避免一个通用的全局Configuration对象。仅将必需的参数传递给客户端类:class Server {    int port;    Server(Configuration config) {        this.port = config.getServerPort();    } }应该重构为: class Server {    public Server(int port) {       this.port = port;    } }一个依赖注入框架将有很大的帮助在这里,但它不是stricly要求。
打开App,查看更多内容
随时随地看视频慕课网APP