As template templates, I believe that the MVC template is one of the most “loosely coupled” ways to build an application.
Think of relationships such as interfaces or contracts between parts of the application. A promises model to make this data available for presentation and controller. No one cares exactly how the model does it. He can read and write from a typical DBMS, such as MySQL, from flat files, from external data sources such as ActiveResource, until he completes his end of the transaction.
The controller promises to make certain data available for presentation, and relies on a model to execute its promises. The view doesn't care how the controller does.
The view assumes that Models and Controllers will retain their promises, and then can be developed in a vacuum. The model and the controller do not care if the view generates XML, XHTML, JSON, YAML, plaintext, etc. They hold their end to contracts.
And of course, View and Controller must agree that certain things exist. Viewing without any appropriate controller activity may work fine, but can never be used. Even if the controller does nothing, as it can be in static pages:
<?php class StaticController extends ApplicationController { public function about () { $this->title = 'About Our Organization'; } }
Then the corresponding view can contain only static text. (Yes, I’ve implemented such things before. It's nice to convey a static look to someone else and say, “Just write on this.”)
If you look at the relationship between M, V, and C as contracts or interfaces, MVC suddenly looks very “loosely coupled”. Be careful with the bait of stand-alone PHP files. After you include and require half a dozen .inc files or mix your application logic with your display (usually HTML), you may have linked individual pages more freely, but there are issues with important aspects in this process.
<?php 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']; ?> Profile</h1> <p><?php echo $user['name']; ?> is <?php echo $user['age']; ?> years old!</p> <?php include 'footer.php'; ?>
Yes, "profile.php" and "index.php" are not completely related, but at what price?
Edit: In response to your edit: click for MVC. You say that you have "semi-programmers" and I'm not sure which half (do you have people with an interface who are well versed in HTML and CSS but not server side?), But with some programming problems?), But with MVC, you can only give them views and say "work on this part."