IOS-приложение VIPER Архитектура - сколько dataManagers?

Я ищу ответ на этот вопрос в контексте архитектурного шаблона VIPER -

Если у вас есть приложение, которое говорит с обоими web api и database Как много dataManagers у тебя должен быть один, два или три?

случай

а) dataManager

б) APIDataManager а также LocalDataManager

с) dataManager, APIDataManager а также LocalDataManager

В которой

а) interactor разговаривает с одним dataManager который говорит с любыми услугами, которые вы можете иметь (удаленные или локальные).

б) interactor знает разницу между local а также remote информация - и называет либо APIDataManager или LocalDataManager, которые разговаривают с удаленными и местными службами соответственно.

в) interactor разговаривает только с генералом dataManager, генерал dataManager затем говорит с APIDataManager а также LocalDataManager

РЕДАКТИРОВАТЬ

Там может быть не окончательное решение. Но любой вклад будет принята с благодарностью.

2 ответа

Решение

Это зависит от того, где находится абстракция в вашем приложении, то есть от того, что вы делаете, и от того, как вы это делаете. Кто определяет, что есть два разных хранилища данных?

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

Если Interactor заботится только о том, какие данные запрашиваются, но не заботится о том, как данные извлекаются, имеет смысл для одного менеджера данных определить, какой источник данных использовать.

Здесь играют две разные роли - бизнес-дизайнер и дизайнер данных. Интерактор отвечает за удовлетворение потребностей бизнес-дизайнера, то есть бизнес-логики, проблемной области и т. Д. Уровень данных отвечает за удовлетворение потребностей дизайнера данных, то есть команды сервера, команды ИТ, команды базы данных и т. Д.

Кто может изменить место поиска данных: бизнес-дизайнер или дизайнер данных? Ответ на этот вопрос поможет вам определить, к какому классу принадлежит эта ответственность.

Ни VIPER, ни Чистая Архитектура не требуют, чтобы для всех интеракторов был только один диспетчер данных. В статье VIPER, на которую ссылаются, используется только один менеджер, просто в качестве примера, что конкретная реализация хранилища удалена.

Интерактивные объекты реализуют бизнес-правила для конкретного приложения. Если приложение обращается к серверу, затем поворачивается и обращается к локальному хранилищу дисков, тогда для интерактора совершенно нормально знать об этом. Более того, некоторые из интеракторов должны справляться именно с этим.

Не забывайте, что нормальные правила композиции объектов применимы и к интеракторам. Например, вы начинаете с одного интерактора, который получает данные с сервера и сохраняет их в локальном хранилище. Если он становится слишком большим, вы можете создать два новых интерактора, один из которых выполняет выборку, другой - сохранение в локальном хранилище. Тогда ваш оригинальный интерактор будет содержать эти новые и делегировать всю свою работу им. Если вы будете следовать правилам определения границ, то при рефакторинге класса extract вам не придется менять объекты, которые работают с новым составным интерактором.

Также обратите внимание, что в целом предлагается не называть объекты с окончаниями менеджера или контроллера, потому что их роли становятся не совсем понятными. Вы могли бы назвать интерфейс, который говорит с сервером, что-то вроде APIClientтот, который абстрагирует ваше локальное хранилище - что-то вроде EntityGateway или же EntityRepository,

Другие вопросы по тегам