Что такое MVC? До конца не могу разобраться.

 
0
 
PHP
ava
zammar | 22.01.2012, 19:49

Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — схема использования нескольких шаблонов
проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три
отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные.


т.е. MVC состоит из трех частей, как я понял:

Модель
представление
поведение

Так вот вопрос в том, что из себя представляет каждый из элементов?
На данный момент я это понимаю так:

Модель - это данные. лежащие в базе в файловой структуре не важно.
представление - это грубо говоря css, html
поведение - это сам скрипт php


И еще, опишите пожалуйста на пальцах, какой-нибудь шаблон проектирования. Я никак не могу понять как с ними работать.


Ответы (13)
ava
userseo | 22.01.2012, 18:55 #
смотри исходники:
http://sourceforge.net/projects/mvc-lt/?source=directory

быстрее поймешь.
ava
MuToGeN | 23.01.2012, 12:45 #
Есть несколько парадигм, скрывающихся за этими тремя буквами.
К примеру, порой можно обходиться вообще без моделей, если проект достаточно прост для этого (философия CodeIgniter).

А в развернутом виде:
1. Модель - это доступ к данным и доменная логика. Не суть важно, откуда модель их берет - из mysql или postgres или mssql или d3 или файловой системы.
2. Представление - это то, что отвечает за визуализацию. И, соответственно, за логику визуализации.
3. Контроллер - связь между 1 и 2. При этом модель и представление могут порой спокойно общаться между собой без контроллера.
4. Сервисы - это как раз то, где должна лежать основная часть бизнес-логики.
Это философия Zend Framework.

Еще советую погуглить на тему FSUC. Но при этом иметь ввиду, что это не более чем мнение одного из разработчиков ZF.
ava
krundetz | 24.01.2012, 12:30 #
Цитата (zammar @ 22.1.2012, 18:49 findReferencedText)
Модель - это данные. лежащие в базе в файловой структуре не важно.

Не совсем, модель это прослойка например в виде класса, через которую с данными работают
Цитата (zammar @ 22.1.2012, 18:49 findReferencedText)
представление - это грубо говоря css, html

очень уж грубо, это структура выходных данных, структурированная строка, структурированная так как надо
Цитата (zammar @ 22.1.2012, 18:49 findReferencedText)
поведение

это какие данные как рабтать с моделью и как ее представлять
Цитата (zammar @ 22.1.2012, 18:49 findReferencedText)
это сам скрипт php

скрипт это все в совокупности
ava
zammar | 27.01.2012, 19:35 #
Спасибо за ответы, ребята. Только у меня вопрос остался с представлением.

т.е. если я напишу метод класса который будет выводить подключение к стилям и html код, то этот метод можно назвать представлением?


function method ()
{
echo ' <html>
<head>

<link href="...">
<script src="...">
</head>
</html>';
}


И еще последний вопрос: а сами данные, стили и html вообще какое нибудь отношение имеют к MVC?
ava
krundetz | 28.01.2012, 00:11 #
Цитата (zammar @ 27.1.2012, 19:35 findReferencedText)
т.е. если я напишу метод класса который будет выводить подключение к стилям и html код, то этот метод можно назвать представлением?

нельзя
Цитата (zammar @ 27.1.2012, 19:35 findReferencedText)
а сами данные, стили и html вообще какое нибудь отношение имеют к MVC?

данные да, html и css нет
ava
zammar | 01.02.2012, 22:25 #
krundetz, все-таки я не понимаю, что именно тогда представление? Можно на примере?
Вы говорили:
Цитата


очень уж грубо, это структура выходных данных, структурированная строка, структурированная так как надо



Но мой метод тоже выводит структурированную стоку так как надо, разве нет?

function method ()
{
echo ' <html>
<head>
<link href="...">
<script src="...">
</head>
</html>';
}
ava
Absinthe | 01.02.2012, 23:07 #
Практически вся логика, связанная с объектами системы, должна быть в модели.

Цитата


все-таки я не понимаю, что именно тогда представление? Можно на примере?

Шаблон, в который передаются данные из контроллера.
ava
krundetz | 02.02.2012, 09:33 #
Цитата (zammar @ 1.2.2012, 22:25 findReferencedText)
Но мой метод тоже выводит структурированную стоку так как надо, разве нет?

Метод не является представлением, он его может собрать из данных или отдать, но сам он не будет представлением.

Вот небольшой и даже примитивный пример.

Модель:

class User {
private $name;
private $ID;
public function __construct($ID, $name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public static function findByIDFromDB($ID) {
/* Пропущен код ищущий пользователя по идентификатору в БД */
return new User($ID, $name);
}
}

Представление:

<html>
<body>
<p><?php echo $user->getName(); ?></p>
</body>
</html>

Контроллер:

include 'User.php';
$user = User::findByIDFromDB(1);
include 'View.php';

P.S. Я специально привел пример всего с одним классом, так как понятие MVC следует отделять от OOP.
ava
zammar | 03.02.2012, 21:13 #
Все ясно.
Конечно нужно будет закреплять практикой, но уже все понятно.
Спасибо!
ava
Turos | 22.02.2012, 18:34 #
Посмотрите как работает любая CMS на MVC
ava
krundetz | 22.02.2012, 19:39 #
Цитата (Turos @ 22.2.2012, 18:34 findReferencedText)
Посмотрите как работает любая CMS на MVC

Именно любая? Не верю.

Turos я уже не говорю о том, что в CMS особенно любой, без четкого представления что такое паттерны найти их проблематично.
ava
SamDark | 22.02.2012, 23:23 #
Народ говорит, что мои заметки на эту тему помогают:

http://rmcreative.ru/blog/post/mvc-front-c...roller-i-router
http://rmcreative.ru/blog/post/mvc-view
ava
krundetz | 23.02.2012, 16:51 #
Цитата (SamDark @ 22.2.2012, 23:23 findReferencedText)
Народ говорит, что мои заметки на эту тему помогают:

подпишусь под этими словами
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить