/ / Swift MVVM Pattern · Розділення шарів - swift, mvvm, notifiercenter

Swift MVVM Pattern · Розділення шарів - swift, mvvm, центр оповіщення

(Це питання однаково стосується MVC та інших моделей, але я зараз працюю над додатком на основі MVVM.)

У шаблоні MVVM; Перегляд діє безпосередньо наViewModel, який, в свою чергу, діє безпосередньо на Моделі, яка сповіщає ViewModel, до якого прив'язується Погляд. Таким чином, запит на зміну поширюється від Погляду до Моделі та повертається як оновлення до Перегляду.

Чому б ти не робив наступне? Перегляд видає сповіщення про запит на зміну. ViewModel отримує сповіщення та видає власне сповіщення про запит на зміну. Модель отримує сповіщення, змінює та видає змінене повідомлення. ViewModel отримує це та видає своє власне змінене сповіщення. Перегляд отримує це та оновлення.

Це звучить складніше (чотири сповіщення за зміну), але досягає 100% розділення шарів і дозволяє будь-яку кількість Моделей підключати до Перегляду (і навпаки).

Примітка: те саме питання застосовується, якщо замість повідомлень замінити RxSwift або інші механізми.

Відповіді:

0 для відповіді № 1

Те, що ви говорите, цілком правдиве. (І це зовсім не складно).

Діючи на зміну моделі, в основному говоритищодо залежностей вашої Моделі є один з різних модулів. (наприклад, отримання контактів з пристрою або натискання, отримане сервером або ...). Це те, що ця поведінка намагається описати, з іншого боку, те, що ви говорите, - це опис поведінки, викликаної користувачем (наприклад, перезавантаження, натискання кнопок або ...).

З іншого боку, це залежить від того, як ви підходитевпровадження ViewModel. оскільки не існує правила великого пальця для впровадження ViewModel, кожна команда чи особа реалізує її по-різному. Деякі реалізують всю Логіку всередині ViewModel і моделі максимально німі. Деякі реалізують ViewModel якомога німіше, що тільки підключає погляд до моделі і навпаки.

Я сам, як правило, реалізую ViewModel як логіку, а модель якомога тупіше і застосовую свої розділення на композицію. (один ViewModel може підключитися до різних ViewModels та ...).

Я можу легко підключити свої ViewModels до CI, і мій проект все ще працюватиме. (отже, я можу написати тести для модулів, UI-тести, інтеграційні тести для всіх)