Могут ли действия быть частью ViewModel MVVM? - PullRequest
0 голосов
/ 20 декабря 2018

У меня ViewModel написано быстро, как это:

public protocol NewsViewModel {
    var imageString: String? { get }
    var title: String? { get }
    var dateString: String? { get }
    var action: (() -> ())? { get set}
}

Тогда мой основной объект данных соответствует viewModel следующим образом:

extension NewsDataObject {

    private func viewModel(action: (() -> ())?) -> NewsViewModel {

        struct NewsViewModelDefault: NewsViewModel {
            var imageString: String?
            var title: String?
            var dateString: String?
            var action: (() -> ())?
        }

        return NewsViewModelDefault(imageString: imgUrlString,
                                    title: articleTitle,
                                    dateString: pubDate,
                                    action: action)
    }
}

Это хорошая практика для использования действийвнутри модели представления?Если да или нет, каковы преимущества и недостатки?

1 Ответ

0 голосов
/ 20 декабря 2018

Я думаю, что это действительно суждение, основанное на том, что делает ваше действие.Если ваше действие просто обновляет пользовательский интерфейс, имеет смысл оставить его в контроллере или представлении.Однако, если он неотъемлемо неотъемлемо связан с уровнем модели или сети, возможно, имеет смысл перенести его в модель представления.

Возможно, вы могли бы уточнить здесь свой сценарий для получения лучшего совета?

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

/*
MyController
*/
myButton.add(target: self, action, #selector(buttonHandler), for: .touchUpInside)

func buttonHandler() {
    // Decide here if the actual logic belongs in the view model or controller
}

Так что поймайте действия и передайте логику туда, где это наиболее целесообразно.По крайней мере, так я бы с этим справился.

...