在 Uncle Bob 的 Clean Architecture 中建模用例

4
考虑到 Uncle Bob's Clean Architecture(或洋葱架构)
我有以下场景:
  • 我想向用户展示一个地方的信息:名称、类别、坐标。
  • 我还想在同一屏幕上,放置一个按钮,点击后会重定向到一个地图应用程序,显示该地方的位置。
为了重定向到地图应用程序,有一个简单的框架API可以接收一个坐标。
对于第一个问题,我应该有一个RetrievePlaceInformationInteractor(用例),它将接收一个地点ID并返回名称、类别和坐标。
但是对于第二个问题,我不知道是否应该:
  • 需要一个单独的OpenPlaceInMapInteractor(用例),它将接收地点ID并返回由Presenter中该框架API使用的坐标。
  • 需要一个单独的OpenPlaceInMapInteractor(用例),它将接收地点ID并使用该框架API重定向到地图应用程序。
  • 使用相同的RetrievePlaceInformationInteractor获取坐标并在回调中填充它,当单击OpenInMap按钮时调用该框架API,并且该回调将被调用。

第一个似乎有点愚蠢,因为它实际上是一个交互器,仅用于检索已由另一个交互器检索的一个属性。

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

第三个似乎合理,但我是否会在一个用例中实现两个用例?

我该怎么办?

谢谢。

1个回答

1
在用例层中实现一个RetrievePlaceInformationInteractor和一个OpenPlaceInMapInteractor,两者都内部调用数据访问层的getPlaceDetails,这是您想要进行依赖反转的地方,以使DB层依赖于用例。
这样您就不会重复自己,为每个用例分配适当的名称。您正确地将它们彼此分开,因为它们不相同,因为它们返回地点详细信息的不同部分。

但是'OpenPlaceInMapInteractor'应该做什么呢?它只应该返回坐标吗?如果是这样的话,那么它们正在返回相同的东西(至少'RetrievePlaceInformationInteractor'也在返回坐标)。 - Rodrigo Ruiz
我以为你需要返回一个重定向到某个地图应用程序的内容。不是吗? - Adi Levin
这是一个iOS应用程序,而不是Web应用程序。重定向是通过iOS API完成的。该API仅需要一个坐标。 - Rodrigo Ruiz
然后只需返回一个坐标。如果您认为这两个用例完全相同,没有必要有两个用例 - 只需创建一个并将其命名为“GetCoordinate”。 - Adi Levin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接