При использовании шаблона проектирования MVVM, есть ли способ предотвратить быстрое взаимодействие уровня контроллера с уровнем модели? - PullRequest
0 голосов
/ 30 мая 2020

Как правило, в шаблоне проектирования MVVM контроллер не будет напрямую взаимодействовать с моделью. ViewModel будет буферным слоем между C и M. Однако, если в модели есть модель данных, например

struct Book
{
  var title: String
} 

, мы все равно можем определить переменную в контроллере, например:

var books = [Book]()

В этом случае контроллер по-прежнему может напрямую взаимодействовать с моделью, но не через ViewModel.

Есть способ предотвратить это? Например, добавление контроля доступа для класса Model или другими способами.

1 Ответ

1 голос
/ 30 мая 2020

Вот возможный подход - определить publi c модель представления и интерфейс к модели, но при этом сохранить приватную модель, так что модель представления может управлять моделью, но кто-либо вне может работать с ней только через интерфейсы publi c:

public protocol Reading {
    var title: String { get set }
}

public class BooksViewModel {
    public var books = [Reading]()

    public func createNewBook() -> Reading {
        let book = Book()
        self.books.append(book)
        return book
    }
}

fileprivate struct Book: Reading
{
  var title: String = "Undefined"
}
...