Ответ
Ключевая особенность MVC — **строгое однонаправленное взаимодействие** с контроллером в роли посредника, что обеспечивает слабую связанность компонентов.
**Схема потока данных:**
`Пользователь -> View -> Controller -> Model -> Controller -> View -> Пользователь`
**Особенности взаимодействия:**
1. **View и Model не знают друг о друге.** View получает данные только от Controller, а Model обрабатывает запросы только от Controller. Это главное правило, предотвращающее прямое обращение View к базе данных или бизнес-логике.
2. **Controller — единственная точка входа для пользовательских действий.** Он принимает запрос (например, HTTP-запрос), решает, какую Model использовать, и какую View отобразить.
3. **Model инкапсулирует состояние и правила приложения.** Она отвечает за данные, валидацию, бизнес-логику и взаимодействие с хранилищем (БД, API).
4. **View пассивна.** Её задача — отобразить данные, переданные контроллером, в нужном формате (HTML, JSON, XML). Она не должна содержать сложной логики.
**Пример на PHP (упрощённый):**
```php
// Model (UserModel.php) - работает с данными
class UserModel {
private $db;
public function __construct($dbConnection) {
$this->db = $dbConnection;
}
public function getAllUsers() {
$stmt = $this->db->query("SELECT id, name FROM users");
return $stmt->fetchAll(PDO::FETCH_ASSOC); // Возвращает чистые данные
}
}
// Controller (UserController.php) - обрабатывает запрос
class UserController {
private $model;
public function __construct($model) {
$this->model = $model;
}
public function listAction() {
$users = $this->model->getAllUsers(); // 1. Запрашивает данные у Model
require 'views/user_list.php'; // 2. Передаёт данные в View
}
}
// View (views/user_list.php) - отображает данные
User List
- = htmlspecialchars($user['name']) ?>