【问题标题】:Overusing the App Delegate?过度使用 App Delegate?
【发布时间】:2013-11-06 09:05:06
【问题描述】:

所以,我正在重写由另一位开发人员构建的旧应用程序 - 他不再是我们团队的一员。

我注意到的是,在 AppDelegate 中有标准方法。最重要的是,还有大约另外 30 种其他方法 - 从设置 UI 内容到检查是否已接受 T&C 之类的内容 - 到显示购物车中的项目,甚至为注销和登录加香等。

现在我还是 iOS 开发的新手,我一直在读到滥用应用程序委托并不是一个好主意。这会被视为滥用吗?

整个应用程序 - 开发人员使用:

MyAppDelegate *appDelegate = (MyAppDelegate*)[MyAppDelegate sharedAppDelegate];

我认为这可能不是最好的方法?

如果这是滥用 AppDelegate - 如何解决它 - 不使用单例?

我正在考虑创建一个新类并将方法分组到相关性?因此,与设置项目/检查等有关的任何事情都归为一类。那么 UI 的东西可能会留在应用程序委托中吗?

我认为打破这一点将有助于解耦和依赖。但是,如果 App 委托中的大部分内容都用于“执行”而不是存储,这是否正确?

【问题讨论】:

  • 为什么这么害怕单身?如果您需要访问应用程序中每个位置的某些数据和方法 - 单例就是答案。只需使用有史以来最伟大的模式 - 不要害怕它:)
  • 单例违反了 SOLID 原则。我认为如此严重地依赖一个类是一个问题。
  • 我建议为此创建一个单例类,因为它们有很多方法和其他添加的变量和东西。如果只有一两个变量,我建议将其保留在 AppDelegate 中(因为它有效,无需修改它并再次进行所有测试),无需为这么小的员工创建新的单例。

标签: ios cocoa-touch oop uiapplicationdelegate


【解决方案1】:

我不确定是否会滥用 AppDelegate 类的一部分,但在编程前景中,您应该将代码分成完整的类!然后管理变得更容易。

回到你的问题!您始终可以创建单例类,也可以为 AppDelegate 类创建类别类因此以某种方式分离代码。这意味着如果您在委托中有登录/注销方法,则可以创建名为 +UserManagement 或某物的类别并放置所有代码那里!您还可以创建 AppUser Singleton 类并将所有用户管理的东西放在那里!

【讨论】:

  • 是的,我可以创建一个单例类 - 但 appDelegate 已经是一个单例类 - 我认为这就是它被如此使用的原因。我正在考虑创建自定义类,我可以使用这些类来访问所需的某些方法。就像您建议的用户管理类一样-但不要将其作为单例-如果它的工作只是做一些事情-我可能不需要存储..也许应用程序委托是这里的肮脏银弹...我只是认为可以做得更好。
  • 当然!这一切都取决于规格!拥有单例类有其自身的优势。!再次,这取决于您的项目以及业务模型的方式。我个人喜欢将 UserManagement 作为 Singleton 类。易于管理!我强烈建议您尽快将代码分开!
  • NSNotifications 可以在应用程序的任何地方触发!单独上课不会阻止您使用它们!如果您对单独的类不满意,请创建一个名为 +NotificationHandlers 等的类别类。对于购物车,您也可以使用 Singleton!整个应用程序只需要维护一个购物车实例!对于搜索,您可能有 Normal 类。UI 处理应该在各自的视图控制器上!
  • 获取令牌是在应用程序委托方法中完成的,但将其发送到服务器可以在网络类或其他地方完成......不能吗?在应用委托类中调用网络方法的问题
  • 是的!你只需要玩代码,你会发现 1000 种方法来做同样的事情!
【解决方案2】:

我会考虑使用 AppDelegate 作为臭代码。 单例更好,但要记住它们很难进行单元测试。

【讨论】:

  • 同意,我就是这样回答这个问题的。我不打算拥有大量单身人士。考虑可能是用户登录/退出的一个-然后是购物车/观察列表的另一个,因为我认为这确实是同一件事。 UI 的东西将放在各自的视图控制器中
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2012-02-05
相关资源
最近更新 更多