
- •Розділ. 6. Структура та архітектура програмного забезпечення
- •6.1 Поняття архітектури програмного забезпечення
- •6.1.1 Якість архітектури. Ознаки загниваючого проекту
- •6.1.2 Як зробити кращу архітектуру
- •6.1.3 Принципи гарної архітектури
- •6.1.4 Повторне використання коду
- •6.1.5 Framework-системи
- •6.1.6 Архітектура cmf-системи
- •6.1.7 Маленькі бібліотеки
- •6.1.8 Використання функцій
- •6.1.8 Патерни проектування
- •6.1.9 Модель-подання-контролера (Model View Controller)
6.1.9 Модель-подання-контролера (Model View Controller)
Типове рішення модель-подання-контролера має на увазі виділення трьох окремих ролей. Модель - це об'єкт, що дає деяку інформацію про домен. У моделі немає візуального інтерфейсу, вона містить у собі всі дані і поведінку, не пов'язані з призначеним для користувача інтерфейсом. В об'єктно-орієнтованому контексті найбільш "чистою" формою моделі є об'єкт моделі предметної області. В якості моделі можна розглядати і сценарій транзакції, якщо він не містить в собі ніякої логіки, пов'язаної з призначеним для користувача інтерфейсом. Подібне визначення не дуже розширює поняття моделі, однак повністю відповідає розподілу ролей у розглянутому типовому рішенні.
Представлення відображає вміст моделі засобами графічного інтерфейсу. Таким чином, якщо модель - це об'єкт покупця, відповідне подання може бути фреймом з купою елементів управління або HTML-сторінкою, заповненою інформацією про покупця. Функції подання полягають тільки у відображенні інформації на екрані. Всі зміни інформації обробляються третім "учасником" системи - контролером. Контролер одержує вхідні дані від користувача, виконує операції над моделлю і вказує подання на необхідність відповідного оновлення. У цьому плані графічний інтерфейс можна розглядати як сукупність подання та контролера.
Говорячи про типове рішення модель-подання-контролер, не можна не підкреслити два основні типи поділу: відділення подання від моделі та відділення контролера від подання.
Відділення подання від моделі - це один з фундаментальних принципів проектування програмного забезпечення. Наявність такого поділу дуже важливо з ряду причин:
- Представлення і модель відносяться до абсолютно різних сфер програмування.
- Користувачі хочуть, щоб, залежно від ситуації, одна і та ж інформація могла бути відображена різними способами.
- Об'єкти, що не мають візуального інтерфейсу, набагато легше тестувати, ніж об'єкти з інтерфейсом.
Ключовим моментом у відділенні подання від моделі є спрямування залежностей: представлення залежить від моделі, але модель не залежить від подання. Це означає, що зміна уявлення не вимагає зміни моделі.
Відділення контролера від подання. Класичним прикладом необхідності такого поділу є підтримка редагованої і не редагованої поведінки. Цього можна досягти за наявності одного подання і двох контролерів (для двох варіантів використання), де контролери є стратегіями, використовуваними поданням. Тим часом на практиці в більшості систем кожному поданню відповідає тільки один контролер, тому поділ між ними не проводиться. Про це рішення згадали тільки з появою Web-інтерфейсів, де відділення контролера від подання виявилося надзвичайно корисним.