在Bob叔叔的清洁架构上建模用例

时间:2016-02-02 04:07:37

标签: ios architecture onion-architecture

考虑Uncle Bob's Clean Architecture(或洋葱架构)

我有以下情况:

  • 我想向用户展示一个地方的信息:名称,类别,坐标。
  • 我也希望在同一个屏幕上,一个按钮,点击后,重定向到一个地图应用程序,显示该地点的位置。

要重定向到地图应用,有一个简单的框架API可以接收坐标。

对于第一个问题,我应该有一个RetrievePlaceInformationInteractor(用例),它会收到一个地方ID并返回名称,类别和坐标。

但是对于第二个问题,我不知道是否应该:

  • 有一个单独的OpenPlaceInMapInteractor(用例),它将接收地点ID并返回Presenter中该框架API使用的坐标。
  • 有一个单独的OpenPlaceInMapInteractor(用例),它将接收地点ID并使用该框架API重定向到地图应用。
  • 使用相同的RetrievePlaceInformationInteractor获取坐标并将其填入回调中,该回调调用框架API,并在单击OpenInMap按钮时调用。

第一个似乎有点愚蠢,因为它本质上只是一个交互器,只是为了检索一个属性,已经被另一个交互器检索。

第二个强制OpenPlaceInMapInteractor访问框架API,这有点违背了交互层不访问上述层的目的(当然,我可以使用API​​的协议并使用依赖注入,但仍然,我依赖于特定于框架的功能。)

第三个似乎是合理的,但我不会在一个中实现2个用例吗?

我该怎么办?

谢谢。

1 个答案:

答案 0 :(得分:1)

在用例层中实现RetrievePlaceInformationInteractorOpenPlaceInMapInteractor,这两个层都在内部从数据访问层调用getPlaceDetails,这是您要进行依赖项反转的地方,所以DB层取决于用例。

这样您就不会重复自己,为两个用例中的每一个分配适当的名称。你保持正确地将它们彼此分开,因为它们不相同,因为它们返回了地方细节的不同部分。