2

我正在VIPER 架构模式的背景下寻找这个问题的答案-

如果您的应用程序同时与 aweb api和 a对话,databasedataManagers应该拥有一个、两个还是三个?

案子

一个) dataManager

b) APIDataManagerLocalDataManager

c dataManager )APIDataManagerLocalDataManager

在哪里

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

b)知道和信息之间的interactor区别- 并调用或,它们分别与远程和本地服务对话。localremoteAPIDataManagerLocalDataManager

c)interactor唯一与将军交谈,然后将军与dataManager将军dataManager交谈APIDataManagerLocalDataManager

编辑

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

4

2 回答 2

5

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

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

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

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

于 2015-12-11T13:22:44.770 回答
4

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

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

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

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

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

于 2015-12-12T18:35:55.353 回答