По мере использования шаблонов фреймворков я считаю, что шаблон MVC является одним из наиболее "слабо связанных" способов создания приложения.
Подумайте об отношениях, таких как интерфейсы или контракты между частями приложения. Модель обещает сделать эти данные доступными для просмотра и контроллера. Никого не волнует, точно как Модель делает это. Он может читать и писать из типичной СУБД, такой как MySQL, из плоских файлов, из внешних источников данных, таких как ActiveResource, при условии, что он завершит сделку.
Контроллер обещает сделать определенные данные доступными для Представления и полагается на Модель для выполнения своих обещаний. Представлению все равно как Контроллер делает это.
Представление предполагает, что Модели и Контроллеры будут выполнять свои обещания, и затем могут быть разработаны в вакууме. Модели и контроллеру все равно, генерирует ли представление XML, XHTML, JSON, YAML, открытый текст и т. Д. Они задерживают выполнение своих контрактов.
И, конечно, View и Controller должны согласиться с тем, что определенные вещи существуют. Представление без некоторого соответствующего действия контроллера может работать нормально, но никогда не может быть использовано. Даже если контроллер не ничего не делает , как это может быть в случае статических страниц:
<?php
class StaticController extends ApplicationController
{
/**
* Displays our "about" page.
*/
public function about ()
{
$this->title = 'About Our Organization';
}
}
Тогда связанный View может просто содержать статический текст. (Да, я реализовал подобные вещи раньше. Приятно передать статический вид кому-то еще и сказать «Просто напишите об этом».)
Если вы посмотрите на отношения между M, V и C как на контракты или интерфейсы, MVC внезапно выглядит очень «слабо связанным». Будьте осторожны с приманкой автономных файлов PHP. Как только вы начнете включать и требовать полдюжины файлов .inc или смешать логику приложения с вашим дисплеем (обычно HTML), вы, возможно, связали отдельные страницы более свободно, но в процессе запутались важные аспекты.
<?php
/**
* Display a user's profile
*/
require_once 'db.php';
$id = $db->real_escape_string($_GET['id']);
$user_res = $db->query("SELECT name,age FROM users WHERE id = $id;");
$user = $user_res->fetch_assoc();
include 'header.php';
?>
<h1><?php echo $user['name']; ?>'s Profile</h1>
<p><?php echo $user['name']; ?> is <?php echo $user['age']; ?> years old!</p>
<?php
include 'footer.php';
?>
Да, "profile.php" и "index.php" совершенно не связаны, но какой ценой?
Редактировать: В ответ на ваше редактирование: Нажмите для MVC. Вы говорите, что у вас есть «полупрограммисты», и я не уверен, какая половина (есть ли у вас люди с интерфейсом, которые хорошо разбираются в HTML и CSS, но не работают на стороне сервера? Писатели с некоторым опытом программирования?), Но с MVC Framework, вы можете передать им только представления и сказать «работать над этой частью».