Caso de uso de modelado en la architecture limpia de tío Bob

Teniendo en count la architecture limpia de tío Bob (o la architecture de la cebolla)

Tengo el siguiente escenario:

  • Quiero mostrar al usuario la información de un lugar: nombre, categoría, coorderada.
  • También quiero en la misma pantalla, un button, que cuando se haga clic, networkingireccione a una aplicación de map que muestre la location de ese lugar.

Para networkingirigir a la aplicación de maps, hay una API de marco simple que recibe una coorderada.

Para el primer problema, debería tener un RetrievePlaceInformationInteractor (caso de uso) que recibiría un identificador de lugar y devolvería el nombre, la categoría y la coorderada.

Pero para el segundo problema, no sé si debería:

  • tenga un OpenPlaceInMapInteractor (caso de uso) por separado que reciba el ID de lugar y devuelva la coorderada que utilizará esa API de marco en el Presenter .
  • tenga un OpenPlaceInMapInteractor (caso de uso) por separado que reciba el ID de lugar y use esa API de framework para networkingirigir a la aplicación de Mapa.
  • use el mismo RetrievePlaceInformationInteractor para get la coorderada y completarla en una callback, que llama a la API de marco, y que se llamará cuando se click el button OpenInMap.

El primero parece un poco estúpido, ya que esencialmente sería un interactor solo para recuperar una propiedad, que ya está siendo recuperada por otro interactor.

La segunda obliga al OpenPlaceInMapInteractor a acceder a una API de framework, lo que anula el objective de que la capa interactiva no acceda a las capas anteriores (seguro, podría usar un protocolo para la API y usar la dependency injection, pero confío en un característica específica del marco).

El tercero parece razonable, pero ¿no estaría implementando 2 casos de uso en uno?

¿Que debería hacer?

Gracias.

Implementar un RetrievePlaceInformationInteractor y un OpenPlaceInMapInteractor en las capas de casos de uso, que internamente llaman getPlaceDetails desde la capa de acceso a los datos, que es donde desea getPlaceDetails las dependencies, de modo que la capa DB depende de los casos de uso.

De esta forma, no se repite, asigna nombres propios a cada uno de los dos casos de uso. Los mantienes por derecho separado de uno a otro, porque no son idénticos, ya que devuelven diferentes partes de los detalles del lugar.