Last active
May 8, 2022 13:54
-
-
Save AlekseyPleshkov/0682bd2f977fa6c6046cb172363b753b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Interactor | |
/// Протокол бизнес логики Interactor'a | |
protocol HomeBusinessLogic: class { | |
/// Метод получения данных из сети или других источников | |
func fetchUser(_ request: HomeModels.FetchUser.Request) | |
} | |
final class HomeInteractor: HomeBusinessLogic { | |
/// Ссылка на логику презентора сцены | |
var presenter: HomePresentationLogic? | |
func fetchUser(_ request: HomeModels.FetchUser.Request) { | |
// Здесь должен быть код получения данных | |
// Для примера просто создадим константы | |
let userPhone = "+7 (999) 111-22-33" | |
let userEmail = "im@alekseypleshkov.ru" | |
// ... | |
// Создаем запрос к Presentor'у с необходимыми данными | |
let response = HomeModels.FetchUser.Response(userPhone: userPhone, userEmail: userEmail) | |
// Вызываем метод логики презентации у Presentor'а | |
presenter?.presentUser(response) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Models | |
/// Модель для передачи данных в VIP цикле | |
enum HomeModels { | |
/// Набор запросов для одного VIP цикла | |
enum FetchUser { | |
/// Запрос к Interactor из View Controller | |
struct Request { | |
let userName: String | |
} | |
/// Запрос к Presentor из Interactor | |
struct Response { | |
let userPhone: String | |
let userEmail: String | |
} | |
/// Запрос к View Controller из Presentor | |
struct ViewModel { | |
let userPhone: String | |
let userEmail: String | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ViewController | |
/// Протокол логики для отображения подготовленной информации | |
protocol HomeDisplayLogic: class { | |
/// Метод логики отображения данных | |
func displayUser(_ viewModel: HomeModels.FetchUser.ViewModel) | |
} | |
final class HomeViewController: UIViewController { | |
/// Ссылка на протокол бизнес логики Interactor'a сцены | |
var interactor: HomeBusinessLogic? | |
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { | |
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) | |
setup() | |
} | |
required init?(coder aDecoder: NSCoder) { | |
super.init(coder: aDecoder) | |
setup() | |
} | |
/// Метод для стартовой настройки компонентов сцены | |
private func setup() { | |
// Создаем компоненты VIP цикла | |
let interactor = HomeInteractor() | |
let presenter = HomePresenter() | |
// Связываем созданные компоненты | |
interactor.presenter = presenter | |
presenter.viewController = self | |
// Указываем ссылку на Interactor для View Controller | |
self.interactor = interactor | |
} | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
// Запускаем метод подгрузки данных при показе сцены | |
fetchUser() | |
} | |
/// Делаем запрос к Interactor для получения данных | |
private func loadUserInfromation() { | |
// Создаем экземпляр запроса к Interactor с параметрами | |
let request = HomeModels.FetchUser.Request(userName: "Aleksey") | |
// Вызываем метод бизнес логики у Interactor'a | |
interactor?.fetchUser(request) | |
} | |
} | |
/// Подписываем контроллер под протокол HomeDisplayLogic | |
extension HomeViewController: HomeDisplayLogic { | |
func displayUser(_ viewModel: HomeModels.FetchUser.ViewModel) { | |
print(viewModel) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Протокол логики презентации | |
protocol HomePresentationLogic: class { | |
/// Метод форматирования полученных данных с Interactor'a | |
func presentUser(_ response: HomeModels.FetchUser.Response) | |
} | |
final class HomePresenter: HomePresentationLogic { | |
/// Ссылка на логику отображения View Controller'a | |
weak var viewController: HomeDisplayLogic? | |
func presentUser(_ response: HomeModels.FetchUser.Response) { | |
// Для примера отформатируем номер телефона | |
let formattedPhone = response.userPhone.replacingOccurrences(of: "-", with: " ") | |
// Создаем экземляр ViewModel для отправки в View Controller | |
let viewModel = HomeModels.FetchUser.ViewModel(userPhone: formattedPhone, userEmail: response.userEmail) | |
// Вызываем метод логики отображения у View Controller'a | |
viewController?.displayUser(viewModel) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment