دیزاین پترن MVC یا معماری MVC که مخفف Model, View, Controller هست و تقریبا همتون باهاش آشنایی دارید.
دیزاین پترن MVC یکی از دیزاین پترن های ساختاری است که برای سازماندهی و جداسازی بخشهای مختلف یک برنامه مورد استفاده قرار میگیرد. MVC متدولوژی معماری محبوبی در توسعه نرمافزار است که به برنامهها انعطافپذیری، قابلیت تست و قابلیت نگهداری بیشتری میبخشد.
مدل (Mpdel): مدل مسئولیتی را بر عهده دارد که دادهها و منطق برنامه را مدیریت کند. مدلها معمولاً شامل کلاسها و ساختارهای دادهای هستند که دادهها را نگهداری و عملیاتی روی آنها را انجام میدهند. مثالهایی از مدلها شامل کلاسهای مرتبط با پایگاه داده، کلاسهای مدیریت کننده داده و کلاسهای مرتبط با قوانین برنامه هستند.
ویو یا نما (View): نما مسئولیت نمایش دادهها را دارد و بر اساس دادههایی که از مدل دریافت میکند، اطلاعات را به کاربر نمایش میدهد. نما معمولاً شامل تمپلیتها، صفحات و بخشهای واسط کاربری است که برای نمایش اطلاعات به کاربر استفاده میشود. نما مستقیماً با کاربر در ارتباط است و تغییرات در نما بر اثر ورودی کاربر اتفاق میافتد.
کنترلر یا کنترل کننده (Controller): کنترلکننده مسئولیت هدایت جریان کار بین مدل و نما را بر عهده دارد. وظیفه کنترلکننده این است که ورودیهای کاربر را دریافت کرده، عملیات لازم را بر روی مدل انجام دهد و سپس نمایش مناسب را به نما بدهد. به عبارتی، کنترلکننده پلی بین مدل و نما است. مثالهایی از عملیاتی که کنترلکننده انجام میدهد، شامل بررسی validate کردن ورودیها، انجام تغییرات در مدل و انتقال دادهها به نما است.
در معماری MVC، نمایش دادهها و همچنین منطق برنامه جدا از یکدیگر میشوند. این امکان را به توسعهدهندگان میدهد تا بخشهای مختلف برنامه را به صورت مستقل توسعه دهند و تغییرات را در بخشهای دیگر تأثیر ندهد. همچنین، جدا کردن منطق برنامه از نمایش دادهها باعث سادهسازی فرآیند تست و نگهداری میشود.
مثال :
class Model {
private $data;
public function setData($data) {
$this->data = $data;
}
public function getData() {
return $this->data;
}
}
class View {
public function render($data) {
echo "Data: " . $data;
}
}
class Controller {
private $model;
private $view;
public function __construct(Model $model, View $view) {
$this->model = $model;
$this->view = $view;
}
public function processData($data) {
$this->model->setData($data);
$data = $this->model->getData();
$this->view->render($data);
}
}
$model = new Model();
$view = new View();
$controller = new Controller($model, $view);
$controller->processData("Hello, World!");
Result:Data: Hello, World!
در مثال بالا، مدل (Model) مسئولیتی برای نگهداری و مدیریت دادهها دارد. نما (View) وظیفه نمایش دادهها را دارد و کنترلکننده (Controller) وظیفه هدایت جریان کار بین مدل و نما را بر عهده دارد. با استفاده از کنترلکننده، داده ورودی (Hello, World!) به مدل داده شده، سپس از مدل خوانده شده و در نما نمایش داده میشود.
این معماری به توسعهدهندگان امکان میدهد که به صورت جداگانه بر روی هر بخش (مدل، نما و کنترلکننده) کار کنند و به سادگی تغییرات را اعمال کنند. همچنین، این الگوی طراحی باعث میشود برنامه ماژولارتر و قابل تستتر باشد.
.