【发布时间】:2014-08-30 14:04:59
【问题描述】:
我正在尝试找出构建我的应用程序的最佳方式。我目前有一个围绕 CLLocationManager 的包装类,它将自己设置为委托并处理我们需要的所有额外设置和业务逻辑。它也是一个单例(sharedManager)。
我希望尽可能忠实于 MVC,并在我的模型中加入尽可能多的逻辑,但我不确定实现这一点的最佳方法。目前,控制器和模型都在获取 sharedManager 并在其上调用方法,例如在呈现模式(控制器)之前检查位置是否可用,或者在进行 REST 调用(模型)之前获取当前位置,但这感觉非常耦合且难以测试。
我想尽可能地使用依赖注入来避免在我的代码的所有部分中不断查询单例方法,但我想不出最好的方法。
我的一些想法:
将我的 CLLocationManager 包装器转换为使用通知与应用程序的所有部分对话以改进解耦。然后我可以使用单例进行启动/停止调用,但让我的控制器/模型通过收听通知来对更改做出反应。这仍然不能避免到处使用单例。
仅在控制器中使用单例,并通过设置属性将所需的位置数据传递给模型。感觉这会让我的模型更容易测试,但不会让我的控制器更容易测试,而且将核心位置代码放在控制器中也感觉很恶心。
我可以通过在模型和控制器上设置属性来传递我的自定义位置管理器包装器的实例,但这感觉有点乏味,并且仍然留下了我在哪里创建初始管理器的问题?
我希望能更深入地思考这个问题的人提供一些建议。欢迎和赞赏所有想法!
【问题讨论】:
-
我的方法是保留 CLLocationManager 包装器,创建一个附加类来管理尽可能多的逻辑,尝试使控制器尽可能简单并使用属性设置数据。我还会在适当的情况下使用通知,以避免过多的耦合,但如果没有应用程序要求,很难更具体。希望这会有所帮助。
标签: ios objective-c core-location