假设我有几个控制器。每个控制器都可以在某个时候创建需要存储在服务器上的新对象。例如,我可以有一个管理表单的RecipeCreationViewController。提交此表单时,会创建一个新的Recipe对象,并需要将其保存在服务器上。网络存储设计模式
什么是最好的设计类的方法,以尽量减少复杂性和耦合,同时保持代码尽可能干净和可读?
辛格尔顿
通常我会创建一个单NetworkAdapter每个控制器可为了节省对象的直接访问。
例子:
[[[NetworkAdapter] sharedAdapter] saveObject:myRecipe];
但是我已经意识到有类调用自己的品牌耦合代码单身,这是很难调试,因为在单访问隐藏在执行和不明显界面。
直接引用
另一种方法是让每个控制器保持到NetworkAdapter的引用,并有这由创建该控制器的类被传递英寸
例如:
[self.networkAdapter saveObject:myRecipe];
代表团
来考虑另一种方法是代表团。 NetworkAdapter可以实现一个“RemoteStorageDelegate”协议,每个控制器可以有一个remoteStorageDelegate,它可以调用像saveObject:on这样的方法。优点是控制器不知道NetworkAdapter的细节,只是实现该协议的对象知道如何保存对象。
例如:
[self.remoteStorageDelegate saveObject:myRecipe];
直接在模型
另一种方法是有处理模型直接保存到网络上。但我不确定这是否是一个好主意。
例如:
[myRecipe save];
你觉得这些是什么?还有其他模式对此更有意义吗?
依赖注入怎么办? –
@PeterWooster谢谢,我会对此进行更多的了解,我还没有完全清楚它到底是什么。如果你能提供一个概述你如何以及为什么要在这个特定情况下应用它,我将不胜感激。 – nebs
这是一个很好的问题。在你对单身人士的讨论中,你的意思是“因为对单身人士的访问隐藏在实施中,而不是从界面中显而易见”?当然它是隐藏的,因为保存一个对象是一个实现细节,不需要通过界面来暴露。我认为单身是一条路要走,我已经看到它成功地用于项目,包括核心数据和网络访问。 – Macondo2Seattle