数据访问器对象单例还是其他一些模式? (目标C)

时间:2014-02-27 04:19:24

标签: ios objective-c design-patterns testing dependency-injection

这似乎满足了这里的三个要求:On Design Patterns: When to use the Singleton?

我需要它只存在一次。 我需要从整个源代码库访问它。 它处理并发访问,即写入锁定,但可以处理并发读取。

大家好,

我一直在阅读很多明智的教育和明智的建议,单身人士是'邪恶的',单身人士是反模式或只是简单的坏消息。

关于日志记录有意义但不是很多的论点。

只是想知道基本上持久数据存储上下文的情况是否对单例有意义,即从磁盘到内存的读/写和引用对象图。

如果没有,人们通常如何解决这个问题,我目前对它没有任何问题,我知道它只创建一次,速度快,访问逻辑在一个地方。这意味着我需要一行代码才能完成与数据模型相关的任何事情。

这留下了唯一一个对测试不利的论点,因为它是对数据进行硬编码的生产实现,但我不能仅仅通过类别或测试代码编写方法来创建测试版本的单身?

DI测试者的最后一个论点是,它是一个硬编码实现,而不仅仅是一个接口,我得到了但我真的没有主要的驱动器来使用DI框架,因为我可以使用协议进行实现,并使用单独的init方法在测试中设置对象状态。单身人士只有两种类型的状态,或者实际上只有一种类型......生产。

使它(在我看来)更容易阅读和更快地开发。

改变我的观点SO?

1 个答案:

答案 0 :(得分:0)

是的,对于一些单身人士来说是邪恶的。对于那些几乎没有MRC知识和更多ARC的新开发人员而言,这听起来很可怕,因为他们需要搞乱内存,不稳定,同步等等。

然而,使用它们并不反对,它们确实有自己的目的,可以使用下面的一些。

  • 当在多个屏幕(VC)之间共享大型数据模型(如数组和字典等)时,我们不能再将它们存储在UserDefaults中(因为用户默认是永久存储并且存储如此大的条目会让应用程序懒得开始)而不是单例最好,因为他们只保留当前的应用程序上下文,重新启动应用程序创建新的。

  • 当我们需要一个稳定的数据库连接可以在应用程序中访问时,不会弄乱我们可以去的每个业务类的连接和关闭。

  • 当我们想要一个动态应用程序自我动作的能力时,我们需要创建一个包含所有颜色,图像实例等的单例类,并在应用程序VC /视图等中使用该实例,因此不需要代码重复和重新处理主题发生在所有地方。

你不必改变你的观点,但稍微调整一下以获得对单身人士的积极意图。

希望这清除它,谢谢