【问题标题】:iOS Application VIPER Architecture - how many dataManagers? [closed]iOS 应用 VIPER 架构 - 有多少个数据管理器? [关闭]
【发布时间】:2016-03-16 15:56:42
【问题描述】:

我正在VIPER Architectural pattern 的上下文中寻找这个问题的答案-

如果您的应用程序同时与web apidatabase 通信,您应该拥有一个、两个还是三个dataManagers

案例

a) dataManager

b) APIDataManagerLocalDataManager

c) dataManagerAPIDataManagerLocalDataManager

在哪里

a) interactor 与单个 dataManager 对话,该 dataManager 与您可能拥有的任何服务(远程或本地)对话。

b) interactor 知道 localremote 信息之间的区别 - 并调用 APIDataManagerLocalDataManager,它们分别与远程和本地服务通信.

c) interactor 只与一般dataManager 对话,一般dataManager 然后与APIDataManagerLocalDataManager 对话

编辑

可能没有明确的解决方案。但任何意见都将不胜感激。

【问题讨论】:

    标签: ios architecture viper-architecture


    【解决方案1】:

    VIPER 和 Clean Architecture 都没有规定所有交互者必须只有一个数据管理器。引用的 VIPER 文章仅使用了一个管理器作为示例,将特定的存储实现抽象掉。

    交互器对象实现特定于应用程序的业务规则。如果应用程序所做的是与服务器通信,然后转身与本地磁盘存储通信,那么交互者知道这一点是完全正常的。更重要的是,一些交互者必须准确地管理这个。

    不要忘记普通的对象组合规则也适用于交互器。例如,您从一个从服务器获取数据并将其保存到本地存储的交互器开始。如果它变得太大,您可以创建两个新的交互器,一个执行获取,另一个 - 保存到本地存储。然后您的原始交互器将包含这些新交互器并将其所有工作委托给它们。如果您遵循定义边界的规则,那么在进行提取类重构时,您将不必更改与新复合交互器一起工作的对象。

    另外,请注意,通常建议不要以 managercontroller 结尾来命名对象,因为它们的角色变得不完全清楚。您可以将与服务器通信的接口命名为 APIClient,抽象本地存储的接口,例如 EntityGatewayEntityRepository

    【讨论】:

    • 注意 - 非常感谢@eofster。
    【解决方案2】:

    这取决于抽象在您的应用程序中的位置,即区分您做什么和如何做。谁在定义有两种不同的数据存储?

    如果本地和远程数据存储是问题域本身的一部分(例如,有时问题需要获取远程数据,而其他时候需要获取本地数据),交互者了解两个不同的数据存储是明智的.

    如果交互器只关心请求的数据,而不关心如何检索数据,那么由单个数据管理器来确定使用哪个数据源是有意义的。

    这里有两个不同的角色——业务设计师和数据设计师。交互者负责满足业务设计者的需求,即业务逻辑、问题域等。数据层负责满足数据设计者的需求,即服务器团队、IT团队、数据库团队等。

    谁可能会改变您检索数据的位置,业务设计师还是数据设计师?该问题的答案将引导您了解哪个类拥有该责任。

    【讨论】:

    • 非常感谢 Jeff - 我非常感谢您的意见。
    猜你喜欢
    • 2017-02-10
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多