Яка різниця між контролером у MVC та ViewModel у MVVM?


21

Я не бачу різниці між MVC та MVVM чітко. Я відчуваю, що команда в ViewModel подібна методу дії в контролері. І Контролер, і ViewModel повідомлять Перегляд, щоб оновитись після зміни стану Моделі за допомогою Прив'язки даних. У чому головна відмінність двох моделей?

Відповіді:


25

Контролер і ViewModel різняться по-різному.

У MVC контролер знає вид, він може змінити Вид. Він також знає Модель і може її назвати. У MVVM ViewModel - це абстрактне зображення представлення і не знає конкретного інтерфейсу, він обмотає модель таким чином, щоб її можна було відображати за бажанням.

У класичному MVC контролер - це лише стратегія Погляду на взаємодію з Модель. Насправді іноді контролер навіть не потрібен. У MVVM він вам не потрібен, оскільки у вас можуть бути різні ViewModels для одного і того ж представлення, якщо вам потрібна інша поведінка. У MVC ви можете мати, наприклад, ReadOnlyController або AdminController для спілкування з Модель. У MVVM ви можете просто мати два ViewModels, і ви виберете потрібний для перегляду.

Але вони мають певну схожість. В обох моделях Погляд є спостерігачем . У класичних MVC погляд є спостерігачем моделі, у MVVM - спостерігачем ViewModel.

Обидві моделі мають на меті забезпечити розділення проблем. MVVM насамперед спрямований на те, щоб забезпечити абстрагування погляду, повністю незалежного від використовуваної технології інтерфейсу. MVC не йде так далеко. Основна увага приділяється роз'єднанню проблем, щоб не ставити бізнес-логіку (Модель) на вигляд.

Ви можете також знайти цю відповідь моєї на подібне питання корисною.

Нарешті, я повинен сказати, що обидва зразки належать одній родині. MVP, з якого MVVM є нащадком, є братом MVC. Якщо ви хочете дізнатися більше, перейдіть за цим посиланням на веб-сайт Мартіна Фаулера , він пояснює все детально.


чи не вважаєте ви, що ці архітектури моделей найкраще розуміють люди, які їх реалізують. Я вважаю, що це питання вибору для розробника. Один вибирає MVC або MVVM залежно від того, чи хоче він тотальної абстракції щодо виду з невеликою надмірною головою (у випадку MVVM).
Pankaj Upadhyay

@Pankaj Upadhyay: Яку з них ви повинні використовувати, залежить від ваших вимог та вибору технології, а також від ідіосинкратії вашої платформи.
Сокіл

Я вважаю, що архітектура MVC достатньо хороша для будь-чого, але це може бути тому, що я не стикався з проблемою, яка особливо вимагала MVVM. IMO, вам, безумовно, потрібно мати деякий контроль над видом, тому що, якщо зробити його абсолютно вільним, ви збільшите більше помилок у майбутніх оновленнях
Pankaj Upadhyay

1
@Pankaj Upadhyay: Якщо ви хочете використовувати ту саму логіку для різних технологій інтерфейсу, тоді MVP є кращим. Я не думаю, що вам обов'язково потрібен певний контроль над видом. Він може бути абсолютно незалежним, і ви можете протестувати ViewModels так само добре - якщо не краще. Краще розділення також виграє дизайнерам, оскільки робота над проектом може бути краще розподілена.
Сокіл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.