我在AppDelegate
整个程序中创建并使用它的对象,并且我已经声明了所有 setter 和 getter,并且还在其中插入、选择、删除、更新数据库查询。
我想问这样做是否是一个好习惯,如果是,那么如何,如果不是,那么为什么这不是一个好习惯?
我希望我的问题很清楚,如果您有任何问题,请提出相关问题。
我在AppDelegate
整个程序中创建并使用它的对象,并且我已经声明了所有 setter 和 getter,并且还在其中插入、选择、删除、更新数据库查询。
我想问这样做是否是一个好习惯,如果是,那么如何,如果不是,那么为什么这不是一个好习惯?
我希望我的问题很清楚,如果您有任何问题,请提出相关问题。
将您的 AppDelegate 变成一个包含一百万个方法和属性的“大泥球”并不是一个好策略(尽管它可能很诱人)。
一种更好、更面向对象的方法,可以将部分功能划分为设计良好的对象——例如,您可能有一个处理所有数据库交互的类 DatabaseManager。然后,您可能有一些需要 DatabaseManager 的应用程序向应用程序委托实例请求对 DatabaseManager 的引用。
或者,您可以将对 DatabaseManager 的引用传递给需要它的应用程序部分。然而,最后一种方法确实会导致更多的“接口污染”,您必须在很多地方修改接口才能传入 DatabaseManager。
另一种选择是有效地使您的 DatabaseManager 本身成为“单例”——通过类上的类方法访问它的实例。以这种方式工作的单例通常不受欢迎,而且通常是有充分理由的(使测试更难,诸如此类)。我倾向于避免让对象将它们的“单例”特性直接嵌入到对象中——如果我需要那种东西,我更喜欢有一个已知的访问点(如果你喜欢,一种“工厂”),你可以去获取一个共享实例。
我认为最好的方法是创建一个全局单例类,而不是在 Appdelegate 中处理。
在那里声明所有的 setter 和 getter,并在项目周围使用单例对象句柄。请参阅此链接如何创建单例类
对于数据库,创建一个 DataAccessLayerClass。每当您要执行任何查询时,请访问此类。此类方法应将输入作为您的数据,并将创建查询并执行该查询并返回数据。
这一切都与复杂性和你的感受有关。你一定喜欢你的解决方案;-)
我显然以另一种方式做到这一点 - 我有单例,它确实处理了我所有常见的数据库事情。我试图让应用程序委托尽可能简单。更好地用于代码共享等。