Я будую сайт з PHP та MySQL. Але я наразі не використовую жодного типу фреймворків. Чи повинен я використовувати контролер перегляду моделі?
Я будую сайт з PHP та MySQL. Але я наразі не використовую жодного типу фреймворків. Чи повинен я використовувати контролер перегляду моделі?
Відповіді:
Моє правило:
будь-яка сторінка, яка потрапляє в базу даних або вимагає будь-якої форми введення користувача, буде простіше в управлінні зі структурою MVC.
Вам не обов'язково працювати з цілою рамкою, якщо сайт досить простий, ви можете використовувати простий клас контролера сторінки для кожної сторінки, яка потребує цього ( див. Вище ). Це не є вами масштабним рішенням, тому пам’ятайте про довгострокові цілі проекту.
Ось приблизний ескіз налаштування (швидко зламаного разом) PageController:
index.php
--------------------------------------------------------
include 'Controller.php';
include 'Db.php';//db connection
include 'View.php';
$Controller = new MyController(new Db(), new View());
$Controller->route($_GET);
$Controller->render();
Controller.php
--------------------------------------------------------
class Controller($db){
/* ensure all collaborators are provided */
public function __construct(Db $db, View $view){
$this->db = $db;
$this->db->connect(array('host','db','user','pass'));
$this->view = $view;
}
/* load the appropriate model data */
public function route($_GET){
//load the right model data and template
switch($_GET){
case $_GET['articles'] === 'cats':
$this->vars = $this->db->get('cats');
$this->template = 'cats.php';
break;
case $_GET['articles'] === 'dogs':
break;
$this->vars = $this->db->get('dogs');
$this->template = 'dogs.php';
default:
$this->vars = array();
}
}
/* render an html string */
public function render(){
echo $this->view->render($this->template,$this->vars);
}
}
View.php
------------------------------------------------------------
class View.php
{
/* return a string of html */
public function render($template,$vars){
// this will work - but you could easily swap out this hack for
// a more fully featured View class
$this->vars = $vars;
ob_start();
include $template;
$html = ob_get_clean();
return $html;
}
}
template cats.php
--------------------------------------------------------
$html = '';
$row_template = '%name%,%breed%,%color%';
foreach($this->vars as $row){
$html .= str_replace(
array(%name%,%breed%,%color%),
array($row['name'],$row['breed'],$row['color']),
$row_template);
}
echo $html;
Db.php
---------------------------------------------------------------
I haven't bothered writing a db class... you could just use PDO
Я б сказав, що було б добре, якщо є ймовірність, що сайт може перевищити нетривіальний розмір. Основна причина полягає в тому, що ви отримуєте кращі можливості змінювати та підтримувати сайт у майбутньому, а обслуговування - це більша частина роботи над більшістю проектів. Це дає вам гарне розмежування проблем, організацію сайту та допомагає уникнути повторного та безладного коду.
MVC - це добре відомий та прийнятий для веб-сайтів шаблон, який допоможе, якщо ви залучите інших людей до проекту. З цією метою ви, мабуть, захочете вибрати для початку встановлену основу.
Ви не надали жодних деталей, які могли б допомогти відповісти на питання, але моя рекомендація за замовчуванням у такому випадку - "так, використовуйте рамку MVC". Заходьте з користувацьким рішенням лише тоді, коли ви справді впевнені, що вам це потрібно.
Як архітектура, MVC зосереджується на розділенні вашого проекту / веб-сторінки на кілька частин. Це може полегшити ваше життя, коли вам доведеться щось змінити в коді або в інтерфейсі користувача.
Правило, якщо ви очікуєте змін у специфікаціях щодо вашого проекту, особливо коли ці зміни стосуються всього коду, тоді перейдіть до тієї архітектури, яка змушує вас розбити код на крихітні лего.
Не в цей момент. Зачекайте, поки ваш веб-сайт стане більшим і сильнішим. Ви запитаєте себе - що я можу зробити, щоб зробити речі менш брудними? Ви прочитаєте статтю про MVC і вам сподобається. Ви більше не будете питати, використовувати його чи ні. Ти дізнаєшся. Це був момент почати використовувати його.