首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个类是否应该为了将数据传递给另一个类而保存数据?

一个类是否应该为了将数据传递给另一个类而保存数据?
EN

Stack Overflow用户
提问于 2015-01-24 10:49:41
回答 1查看 103关注 0票数 1

我正在为iOS创建一个登录应用程序,并且偶然发现了一个设计问题。在我的应用程序中,一些数据(例如current user id)必须在视图控制器之间共享,所以我最初的想法是将数据保存在AppDelegate中,并在需要的时候调用它。这是可行的,但这意味着AppDelegate将做它不打算做的工作,因此它将是糟糕的体系结构,所以我想创建一个单例类来保存所有共享数据。这似乎更有针对性,我在以前的一些应用程序中使用了这种策略,但在搜索单例类的最佳实践时,我发现了许多反对使用它们的结果,因为它们:

  1. 隐藏依赖项
  2. 违反单一责任原则
  3. 使单元测试变得困难

(摘自这个问题的最上面的答案:What is so bad about singletons?)

另外两种设计模式的替代方法是在视图控制器之间传回数据,但这似乎也不合适。例如,current user id I必须将它从登录视图控制器传递到主视图控制器(对于所有用户都是相同的),然后从主视图控制器传递到更指定的视图控制器,该视图控制器是为用户定制的。在这种情况下,主视图控制器持有数据只是为了将其传递给更具体的视图控制器,对我来说,这似乎也违反了单一责任原则。让主视图控制器保存它不需要的数据是不好的设计,还是有更好的选择?

EN

回答 1

Stack Overflow用户

发布于 2015-01-24 11:21:26

没有“神奇”的方法来存储模型-视图-控制器应用程序的模型状态:您构建了一个类,并将它“锚定”在某个地方以便于访问。

一个常见的做法是使用应用程序委托。这是很方便的,因为它是一个系统提供的单一应用程序,但它在逻辑上是次等的,因为,正如您所注意到的,app委托并不是用于此目的的。

另一个常见的策略是使用单例。这在应用程序开发中是司空见惯的,在实践中也很好。您可以通过将对单例的访问限制为视图控制器的初始化器来减轻常见的不满--这解决了隐藏的依赖关系和可测试性问题。

最后,您可以传递数据,在这种情况下,它与在一个视图控制器中“锚定”数据相同。可以说,这会导致比单例更大的问题,因为依赖关系更难跟踪。

我建议将状态存储在单例中,并在视图控制器的初始化代码中使用它。这样,对单例的依赖将保持本地化,并且您可以以最小的努力测试您的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28124670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档