Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Что такое MVC? До конца не могу разобраться.


Автор: zammar 22.1.2012, 18:49
Код

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


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

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

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

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


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



Автор: userseo 22.1.2012, 18:55
смотри исходники:
http://sourceforge.net/projects/mvc-lt/?source=directory

быстрее поймешь.

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

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

Еще советую погуглить на тему FSUC. Но при этом иметь ввиду, что это не более чем мнение одного из разработчиков ZF.

Автор: krundetz 24.1.2012, 12:30
Цитата(zammar @  22.1.2012,  18:49 Найти цитируемый пост)
Модель - это данные. лежащие в базе в файловой структуре не важно.

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

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

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

скрипт это все в совокупности

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

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

Код

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

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


И еще последний вопрос: а сами данные, стили и html вообще какое нибудь отношение имеют к MVC?

Автор: krundetz 28.1.2012, 00:11
Цитата(zammar @  27.1.2012,  19:35 Найти цитируемый пост)
т.е. если я напишу метод класса который будет выводить подключение к стилям и html код, то этот метод можно назвать представлением?

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

данные да, html и css нет

Автор: zammar 1.2.2012, 22:25
krundetz, все-таки я не понимаю, что именно тогда представление? Можно на примере?
Вы говорили:
Цитата

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


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

function method ()
{
    echo '         <html>
           <head>
                  <link href="...">
                  <script src="...">
         </head>
         </html>';
}

Автор: Absinthe 1.2.2012, 23:07
Практически вся логика, связанная с объектами системы, должна быть в модели.

Цитата

все-таки я не понимаю, что именно тогда представление? Можно на примере?
 Шаблон, в который передаются данные из контроллера.

Автор: krundetz 2.2.2012, 09:33
Цитата(zammar @  1.2.2012,  22:25 Найти цитируемый пост)
Но мой метод тоже выводит структурированную стоку так как надо, разве нет?

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

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

Модель:
Код

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.

Автор: zammar 3.2.2012, 21:13
Все ясно.
Конечно нужно будет закреплять практикой, но уже все понятно.
Спасибо!

Автор: Turos 22.2.2012, 18:34
Посмотрите как работает любая CMS на MVC

-----------------------------
https://www.allmetals.ru/metals/magnesium/chemprop/

Автор: krundetz 22.2.2012, 19:39
Цитата(Turos @  22.2.2012,  18:34 Найти цитируемый пост)
Посмотрите как работает любая CMS на MVC 

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

Turos я уже не говорю о том, что в CMS особенно любой, без четкого представления что такое паттерны найти их проблематично.

Автор: SamDark 22.2.2012, 23:23
Народ говорит, что мои заметки на эту тему помогают:

http://rmcreative.ru/blog/post/mvc-front-controller-controller-i-router
http://rmcreative.ru/blog/post/mvc-view

Автор: krundetz 23.2.2012, 16:51
Цитата(SamDark @  22.2.2012,  23:23 Найти цитируемый пост)
Народ говорит, что мои заметки на эту тему помогают:

подпишусь под этими словами

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)