假设我有几个控制器。每个控制器都可以在某些时候创建需要存储在服务器上的新对象。例如,我可以有一个管理表单的 RecipeCreationViewController。提交此表单时,会创建一个新的 Recipe 对象,并需要将其保存在服务器上。
设计类以最小化复杂性和耦合同时保持代码尽可能干净和可读的最佳方法是什么?
辛格尔顿
通常我会创建一个单例网络适配器,每个控制器都可以直接访问它以保存对象。
例子:
[[[NetworkAdapter] sharedAdapter] saveObject:myRecipe];
但是我已经意识到,让类自己调用单例会导致难以调试的耦合代码,因为对单例的访问隐藏在实现中,并且从接口中并不明显。
直接参考
另一种方法是让每个控制器都持有对 NetworkAdapter 的引用,并由创建控制器的类传入。
例如:
[self.networkAdapter saveObject:myRecipe];
代表团
想到的另一种方法是委托。NetworkAdapter 可以实现“RemoteStorageDelegate”协议,并且每个控制器都可以有一个 remoteStorageDelegate,它可以调用诸如 saveObject: on 之类的方法。优点是控制器不知道 NetworkAdapter 的细节,只有实现协议的对象知道如何保存对象。
例如:
[self.remoteStorageDelegate saveObject:myRecipe];
直接在模型中
另一种方法是让模型直接处理保存到网络。我不确定这是否是个好主意。
例如:
[myRecipe save];
你怎么看这些?还有其他更有意义的模式吗?