Организация архитектуры MVP и REST API


#1

На простых примерах изучил MVP и REST , теперь собственно хочу объединить и закрепить знания уже в более менее нормальном проекте, логика получение JSON , запроса токена, должно выполняться в Presenter ? Не совсем уверен что правильно построил архитектуру.

Это twitter search api который в начале получает запрос на поиск по слову и выводит в tableView распарсенное значение, в таком формате:

введите сюда описание изображения

Собственно суть: не получается в MVP установить изображение профиля, в файле TweetPresenter(строка 100) добавляю ссылку изображения в модель, и передаю ссылку в метод downloadData (строка 119) и пытаюсь через делегат установить картинку профиля, сам делегат реализовывается в TweetTableViewCell (полагаю delegate = self в awakeFromNib не работает)

Так же пытался установить наблюдатель за моделью в том же TableViewCell

var tweet: Tweet? { didSet { updateUI() } }

 func updateUI() {
print("it works")
if let profileImageUrl = tweet?.profileImageUrl {
    let url = URL(string: profileImageUrl)

    let request = URLRequest(url: url!)
    let networkProcessor = NetworkProcessing(request: request)
    networkProcessor.downloadData { [weak self] (imageData, httpResponse, error) in
        DispatchQueue.main.async {
            if let imageData = imageData {
                self?.avatarImageView.image = UIImage(data: imageData)
            }
        } }

Но он тоже не работает, можете посмотреть проект, подсказать где ошибки и как это на самом деле правильно делается :slight_smile:

проект: https://github.com/Constantine1995/ClientTwitterREST


#2

Вынести всё из контроллера и загружать картинки в ячейке, что то не очень у вас какой-то MVP :slight_smile:

Попробуйте для начала написать рабочее приложение хоть как то (как правило это что то около MVC), а потом уже думать о высоком.


#3

Лучше понять как устроена MVP в теории и все. На собеседованиях только это спрашивают. А на практике я вот не встречал за 3 года ни одного проекта на MVP. Либо MVC с сервисами, либо Viper либо yarch (что кстати, удобней VIPER-а).


#4

Когда дедлайны горят, каждый херачит как может, viper и yarch отдыхают, а дядюшка Боб нервно курит в сторонке :slight_smile:


#5

кто ж спорит? вы еще скажите, что во время дедлайнов используют ТДД? %)


#6

Я типа пошутил.

ТДД это вообще зашквар, программирование ради программирования.


#7

Почему? Если не злоупотреблять, то вполне хорошо получается. :thinking:
Это намного удобней чем после сидеть и писать тесты. Которые откровенно говоря, лень ковырять.


#8

Тесты нужно писать когда это целесообразно и когда окупается. Это явно после того как все фичи внедрены и код отрефакторин (и то если дело дойдет). Конечно если вы гений и видите конечный продукт с первой строчки кода, или вам нравится много раз переписывать тесты, или вам за это много платят, то вполне можно писать сначала тесты.

P.S. Это имхо не претендую на истину.


#9

Менеджер проекта: Ты должен доделать эту фичу до завтра.
Я: Ок.