Где я должен создать экземпляр модели для представления в SwiftUI? - PullRequest
1 голос
/ 22 апреля 2020

Я новичок в MVVM. Насколько я понимаю, я должен избегать использования кода модели внутри структуры представления.

В моем случае у меня есть 2 представления: MainView и ChildView. MainView не имеет ViewModel. Но у ChildView есть ViewModel (например, ChildViewModel). Поскольку ChildViewModel используется только в ChildView, я не зарегистрировал экземпляр модели в EnvironmentObject или не передал его в MainView, потому что MainView вообще не использует модель.

Я думаю, лучший способ заключается в том, что ChildView создает свой собственный экземпляр модели, как показано ниже. Но я не уверен, нормально это или нет. Это нарушает правила MVVM?

struct ChildView: View {
    @ObservedObject var childViewModel = ChildViewModel()

    var body: some View { ... }
}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Это нарушает правила MVVM?

Нет, это не так, потому что MVVM об «разделении ответственности» и предоставленном шаблоне точно разделяет View & ViewModel. Более того, оно также следует правилу «внедрения зависимостей», поскольку вы можете использовать и

ChildView() // with default model

и

ChildView(childViewModel: ChildViewModel(...)) // some specific model

0 голосов
/ 22 апреля 2020

Это не нарушает схему MVVM. Если вашему основному представлению необходимо передать некоторые параметры дочернему представлению, это следует сделать с помощью параметров init. Однако следует обратить внимание на то, что каждый раз, когда вы переходите к дочернему представлению из основного представления, будет создаваться новый экземпляр ChilViewModel. В случаях использования, где это недопустимо, модель представления создается в родительском представлении и передается дочернему представлению, чтобы поддерживать один и тот же экземпляр каждый раз, когда пользователь переходит к дочернему представлению. Оба не нарушают шаблон MVVM. Надеюсь это ответит на твой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...