Skip to main content

Як MVC забезпечує розділення відповідальності?

Патерн MVC (Model-View-Controller) забезпечує розділення відповідальності за рахунок того, що кожен компонент ізольований і виконує суворо обмежену роль у ланцюжку обробки даних і взаємодії з користувачем.


1. Model (Модель) - ізолює дані та бізнес-логіку

  • Відповідає лише за те, що відбувається в системі: зберігання, обробку та правила.
  • Не знає, як ці дані будуть відображені або хто їх запитав.
  • Уся логіка "що можна, а що не можна" зосереджена тут.

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

Висновок: дані і логіка не залежать від інтерфейсу.


2. View (Представлення) - ізолює відображення

  • Відповідає лише за те, як інформація виглядає.
  • Отримує вже готові дані та виводить їх користувачу.
  • Не містить логіки обробки чи зміни даних.

Приклад: шаблон HTML просто відображає {{ user.name }} - він не знає, як цього користувача було знайдено.

Висновок: інтерфейс можна змінювати без переписування бізнес-логіки.


3. Controller (Контролер) - керує потоком

  • Є посередником між користувачем, моделлю та представленням.
  • Отримує ввід, вирішує, що робити, і координує взаємодію шарів.
  • Не зберігає дані і не відповідає за їх відображення.

Приклад: контролер обробляє запит GET /users/5, викликає метод UserModel.find(5) і передає результат у profile.html.

Висновок: контролер керує, але не втручається в чужі обов'язки.


4. Як це працює разом

javascript
[Користувач] ↓ ввід [Controller] - вирішує, що робити [Model] - обробляє дані та бізнес-логіку [View] - показує результат

5. Результат розділення

КомпонентВідповідає заНе займається
ModelДані, бізнес-правилаІнтерфейс, маршрутизацію
ViewВідображенняРозрахунки, зберігання даних
ControllerКерування потоком, координаціюВідображення, бізнес-правила

Підсумок:

MVC розділяє відповідальність так, що кожен компонент робить лише "свою справу". Це знижує залежність частин застосунку, спрощує тестування, розширення та підтримку - можна змінювати представлення, не чіпаючи логіку, або змінювати базу, не переписуючи інтерфейс.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.