2016-02-02 4 views
3

Учитывая Uncle Bob's Clean Architecture (или лукового Architecture)Моделирование Использование на Чистой архитектуру дяди Боба

У меня есть следующий сценарий:

  • Я хочу, чтобы показать пользователь, информация о месте: названии, категория, координат.
  • Я также хочу, чтобы на том же экране была нажата кнопка, которая при нажатии на нее перенаправляется в приложение карты, показывающее местоположение этого места.

Для перенаправления на приложение Map есть простой API-интерфейс Framework, который получает координату.

Для первой проблемы у меня должен быть RetrievePlaceInformationInteractor (прецедент), который получит идентификатор места и вернет имя, категорию и координату.

Но для второй задачи, я не знаю, должен ли я:

  • имеет отдельный OpenPlaceInMapInteractor (случай использования), что бы получить место идентификатора и возвращает координату для использования этой рамочной API в Presenter.
  • имеют отдельный OpenPlaceInMapInteractor (прецедент), который получит идентификатор места и использует этот API-интерфейс для перенаправления на приложение Map.
  • используйте тот же самый RetrievePlaceInformationInteractor, чтобы получить координату и заполнить ее в обратном вызове, который вызывает API фреймворка, и это будет вызываться при нажатии кнопки OpenInMap.

Первый кажется немного глупым, поскольку он по существу является интерактором только для извлечения одного свойства, которое уже извлекается другим взаимодействием.

Второе направление: OpenPlaceInMapInteractor для доступа к API фреймворка, который, как правило, поражает цель уровня взаимодействия, не обращаясь к вышеуказанным уровням (конечно, я мог бы использовать протокол для API и использовать инъекцию зависимостей, но все же, m, полагаясь на специфическую структуру).

Третий кажется разумным, но разве я не буду использовать 2 варианта использования в одном?

Что мне делать?

спасибо.

ответ

1

Реализовать RetrievePlaceInformationInteractor и OpenPlaceInMapInteractor в сценарии использования слоев, что как внутри, так называют getPlaceDetails от уровня доступа к данным, который где вы хотите сделать инверсию зависимостей, так что DB слой зависит от сценариев использования ,

Таким образом, вы не повторяетесь, вы назначаете собственные имена для каждого из двух вариантов использования. Вы по праву считаете их отдельно от друг друга, потому что они не идентичны, поскольку они возвращают разные части деталей места.

+0

Но что должен делать «OpenPlaceInMapInteractor»? Должен ли он возвращать координату? Если это так, то они возвращают одно и то же (по крайней мере, «RetrievePlaceInformationInteractor тоже возвращает координату) –

+0

Я думал, что вам нужно вернуть перенаправление в какое-либо приложение карты. Нет? –

+0

это приложение для iOS, а не веб-приложение. А перенаправление осуществляется через API iOS. Для этого API требуется только координата. –