2011-03-01 96 views
4

我正在做一个AppDelegate的对象,并在整个程序中使用它,并且我已经声明了所有的setter和getters,并且还插入,选择,删除,更新其中的数据库查询。使用AppDelegate进行数据处理和处理是不是很好的做法?

我想问一下,这是否是一个好习惯,如果是,那么如何,如果没有,那么为什么这不是一个好的做法?

我希望我的问题很清楚,如果您有任何问题,请提出相关问题。

回答

8

把你的AppDelegate变成一个包含一百万个方法和属性(尽管它可能是诱人的)的“大泥潭”并不是一个好策略。

一个更好,更面向对象的方法将功能划分为精心设计的对象 - 例如,您可能有一个DatabaseManager类来处理所有数据库交互。然后,您可能需要一些应用程序,这些应用程序需要DatabaseManager向应用程序委托实例请求对DatabaseManager的引用。

或者,您可以将对DatabaseManager的引用传递给需要它的应用程序的各个部分。然而,这最后一种方法会导致更多的“接口污染”,在这种情况下,您必须在很多地方修改接口以传入DatabaseManager。

另一种选择是有效地让你的DatabaseManager本身成为一个“单例” - 通过类的类方法访问它的一个实例。以这种方式工作的单身人士往往会皱起眉头,而且通常是出于很好的理由(使测试更加困难,诸如此类)。我倾向于避免让对象将“单身”特性烘焙到对象中 - 如果我需要这种事情,我更喜欢拥有一个已知的访问点(如果你喜欢的话,是一种“工厂”),你在哪里可以去获取一个共享实例。

2

这一切都是关于复杂性和你的感受。你必须喜欢你的解决方案;-)

我明显以另一种方式做到这一点 - 我有singleton,它处理我所有常见的数据库事情。我试图让应用程序委托尽可能简单。代码共享更好,等等。

+1

而其他人不得不稍后喜欢他的解决方案,如果他们正在使用相同的代码:) – occulus 2011-03-01 14:17:54

4

我认为最好的方法是创建一个全局的单例类,而不是在Appdelegate中处理。

声明你所有的设置者和获取者,并在你的项目中使用单例对象句柄。看到这个链接如何创建singleton class

对于数据库,创建一个DataAccessLayerClass。每当你想执行任何查询访问这个类。这个类方法应该有输入作为你的数据,并将创建查询并执行该查询并返回数据。

+1

您提到的单例模式 - 其中一个对象具有单身特性“烘烤” - 是相当严格的。如果您以后想要两个数据库管理器对象(因为您连接到两个数据库)会怎么样?如果您编写的测试需要多个实例存在才能用于测试目的?提供某种类型的工厂来提供配置的共享单例实例更为灵活。只是我的意见。 – occulus 2011-03-01 14:11:44

+0

还有一个问题:优秀的设计通常需要将配置信息传入数据库管理器(或其他),而不是配置自身(再次出于测试等原因)。但是,如果所有的代码都要求单例对象本身为它的共享实例,那么这会变得棘手,因为所有对getInstance的调用都必须在配置信息中传递以防需要它。 – occulus 2011-03-01 14:16:55

相关问题