PHP, починаючи з версії 5.3, подарував нам простір імен. З тих пір йде десь мляве, а десь бурхливе обговорення, як же це простір імен використовувати?
Деякі фреймворки, такі як Symphony, Laravel, і, звичайно ж Zend взяли цю технологію на озброєння.
Все це більш-менш вписалося в схему MVC. Залишилася одна, напевно вічна, дискусія, якою ж має бути головна шлюбна пара додатки - Модель і Контролер?
Одні нам кажуть, що Модель повинна бути огрядною і товстої і при ній стрункий і тонкий Контролер. Одним словом - матріархат.
Інші, навпаки, вважають, що Контролер повинен всім керувати і наказувати, тому він виходить грунтовний, вгодований. І при ньому худенька, стройненькая Модель, завдання якої зводиться до подай-принеси. Такий ось патріархат.
Так що ж краще в схемі MVC? Патріархат або матріархат?
Давайте подивимося на це з точки зору побудови сімейного осередку на основі демократії. І нехай Namespace нам в цьому допоможе.
Нам не подобаються товсті, незграбні Контролери, які, як слон в посудній лавці, з необережності можуть розчавити все додаток.
Нам не подобаються також товсті Моделі. Ну а кому вони подобаються? Вони повинні бути гідні подіуму!
Давайте спробуємо за допомогою Namespace, як з хорошою сватів, створити гармонійну сім'ю.
Спочатку створимо каркас додатка. Як це не банально, але нехай це буде блог.
Ми створили основнову структуру, де:
- Blog - це сховище нашого застосування;
- Views і Templates - сховище уявлень і шаблонів;
- Utility - сховище загальних бібліотек;
- index.php - bootstrap скрипт;
- Post - ось тут і повинна відбутися сімейна ідилія Контролера і Моделі.
З index.php все просто:
При створенні класу Blog ми впроваджуємо в нього клас Post з Namespace BlogPost і автозавантажувач завантажує його з Blog / Post / Post.php.
Напевно, цей клас і можна назвати Контроллером,
Сутність Post включає в себе:
- структуру самої записи даних - BlogPostEntitiesPostEntity.php
- систему взаємодії з базою даних - BlogPostRepositoriesDB.php - ось вона, наша тонка, витончена Модель,
Тільки подай-принеси, і нічого більше!
В результаті нам вдалося створити структуру програми, де всі компоненти добре пов'язані, при цьому ми домоглися чіткого поділу класів, де кожен клас виконує свою задачу. Контролер у нас тонкий і в той же час потужний. Модель відповідно ньому. Ідеальна сім'я!
І все Багодаря Namespace.
Не сперечаюся, в багатьох випадках зручний фреймворк. Але, подивіться, Namespace вам нічого не нагадує?
Чіткий поділ на класи, сувора, і в той же час гнучка, повністю підпорядкована розробнику ієрархія каталогів і класів.
Відсутність часом такого вагомого доважку у вигляді сотень файлів і класів у вигляді фреймворка.
Відсутність прокрустова ложа правил взаємодії класів і компонентів.