使用AppDelegate进行数据操作和处理是一种好习惯吗?

时间:2011-03-01 13:54:51

标签: iphone singleton uiapplicationdelegate

我正在创建一个AppDelegate的对象,并在整个程序中使用它,我已经声明了所有的setter和getter,并且还插入,选择,删除,更新了数据库中的查询。

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

我希望我的问题很明确,如果您有任何问题,请询问相关问题。

3 个答案:

答案 0 :(得分:8)

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

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

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

另一个替代方案是有效地使您的DatabaseManager本身成为“单例” - 通过类上的类方法访问它的实例。以这种方式工作的单身人士往往不满意,并且通常有充分的理由(使测试变得更难,那种事情)。我倾向于避免让对象将“单身”性质烘焙到对象中 - 如果我需要那种东西,我更喜欢拥有一个已知的访问点(如果你喜欢的那种“工厂”)你在哪里可以去获取共享实例。

答案 1 :(得分:4)

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

在那里声明你所有的setter和getter,并在你的项目周围使用singleton对象句柄。请参阅此链接如何创建singleton class

对于Database,创建一个DataAccessLayerClass。无论何时您想执行任何查询,都可以访问此类。这个类方法应该有输入作为您的数据,并将创建查询并执行该查询并返回数据。

答案 2 :(得分:2)

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

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