petruska
@petruska
IOS Developer

Как правильно писать на MVP?

Всем привет, хочу написать типичное приложение с хорошим кодом на MVP
Я опишу как работает приложения, попутно спрашивая моменты, пожалуйста, что не правильно, что поправить и как сделать лучше
Приложение идет на сервер, получает список друзей, добавляет их в КорДату и выводит в таблицу, при нажатии на ячейку берет ИД друга и передает ИД в другой контроллер
И так FriendsView view созданая в xib на которой лежит кнопка "Загрузить данные" и таблица
У FriendsView эсть делегат didPressedLoadFriendsButton и метод updateTableWithModelArray (к ним еще вернемся)
В нашом ViewControlllere мы добовляем FriendsView на главную view и подписываемся на делегат
1) Юзер нажимает на кнопку и приходит об этом информация нашому VC.
2) VC вызывает метод ServerManager который отдает в блоке массив FriendServerModel (в котором поля типа firstName, secondName, userID, userAvatar)
3) Далее VC дает команду сохранить FriendServerModel в КорДату через метод класса CoreDataManager (вот тут у мне не понятно как лучше передать FriendServerModel? Если я передам сразу FriendServerModel то будет тупо что мой CoreDataManager знает о FriendServerModel, если сделать параметрами то 100500 параметров будет выгледить тупо)
4) После сохранения в БД я вызываю метод класса FriendMapper в который я передаю модель FriendCoreDataModel (которую я беру от CoreDataManager, а не от сервера, что б логика не менялась для оффлайна) и мой FriendMapper делает простую логику конвертирования полей от сервера(БД) в ту что нам нужно выводить, так как делать постоянно логику в ячейки ето тупо)
И FriendMapper отдает массив FriendUIModel (в которой аватарка, имя(firstName + secondName) и отсутствие ид))
5) VC говорит FriendsView, обнови таблицу данными и передаю массив с FriendUIModel
  • Вопрос задан
  • 645 просмотров
Пригласить эксперта
Ответы на вопрос 3
ManWithBear
@ManWithBear
Swift Adept, Prague
Нужно определиться с "источником правды".
В случае, когда приложение по сути тонкий клиент с кешовой прослойкой в виде собственной дата базы, мы обычно делаем сервер этим источником.
Тогда модель приложение выглядит как-то так:
Сервер -> Серверные сущности -> Сущности дата базы -> Дата база -> Экраны
Соответсвенно все изменения данных происходят только ответом сервера. Нажал на кнопку "добавить в друзья"? Послал на сервер реквест, в ответе пришла обновленная сущность списка друзей, обновилась дата база, вьюшки получили нотификацию об обновление данных, перерисовались.

К слову можно не напрягаться по поводу использования NSManagedObject потомков для настройки вьюшек, CoreData изначально создавалась для этих целей (Привет NSFetchedResultsController)
Ответ написан
Комментировать
@lem_prod
не буду комментрировать именно Ваше описание реализации паттерна, лично я такое должен по клацать, чтобы представить связи.

А по поводу "написать типичное приложение с хорошим кодом на MVP", я бы советовал просто взять любой MVP фреймверк, разобраться в архитектуре, и реализовать у себя...если конечно хотите "велосипед" собирать)
Ответ написан
briahas
@briahas
ObjC, Swift, Python
Ваша просьба "что не правильно, что поправить и как сделать лучше" сильно общая. Если вам вообще все не нравится, то не делайте через MVP. Потому что - "править" и "сделать лучше" можно все.

Уточните моменты в которых надо помочь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы