Index · Правила · Поиск· Группы · Регистрация · Личные сообщения· Вход

Список разделов Компьютерный раздел
 
 
 

Раздел: Компьютерный раздел MVC фреймворк 

Создана: 23 Июня 2012 Суб 23:24:24.
Раздел: "Компьютерный раздел"
Сообщений в теме: 14, просмотров: 1175

  1. 23 Июня 2012 Суб 23:24:24
    Пусть стоит задача перед нами - получить данные от сервера http, обработать и создать отчеты.

    Пишем систему на php. Для работы с БД будем использовать расширение PHP Data Objects (PDO)

    Слово фреймворк означает модель. Весь код приложения делится на три части по функциональности - model (логическая часть), controller (интерфейс между частями приложения) и view (представление).

    В качестве строительных элементов приложения будем использовать классы. Это удобно и является развитием процедурного стиля программирования.

    Я буду использовать как основу, системы описанные в этих статьях

    [внешняя ссылка]
    [внешняя ссылка]

    Для начала я установил на компьютер http-сервер Apache 2.2, php 5.3.13 и mysql 5.5

    Далее несколько раз прочитал обе статьи, ознакомился с кодом фреймворка, который скачал по ссылке [внешняя ссылка]
  2. 24 Июня 2012 Вск 0:45:53
    Интрига...
  3. 24 Июня 2012 Вск 1:03:18
    Разбираюсь. По ходу буду материал выкладывать
  4. 25 Июня 2012 Пон 9:52:52
    Ссылки в php

    Не сталкивался раньше, можно передавать переменные в пользовательскую функцию по ссылке,
    если нужно разрешить функции модифицировать свои аргументы.

    Такой код даст вывод - '4545route'

    Код:
    <?php
       $controller='4545';

            getController($controller);
            echo $controller;

       function getController(&$controller)
       {
               $controller .= 'route';
       }
    ?>


    А такой - '4545'

    Код:
    <?php
       $controller='4545';

            getController($controller);
            echo $controller;

       function getController($controller)
       {
               $controller .= 'route';
       }
    ?>
  5. 26 Июня 2012 Втр 9:54:38
    Ключевую роль в MVC играет класс Controller.

    Класс Router принимает запрос, извлекает из него имя нужного контроллера , его метод , передаваемый методу список аргументов и отправляет на исполнение классу Controller

    Класс Controller подключает модель обработки данных и затем обработанные данные отправляет нужному классу View , для отображения результата
  6. 26 Июня 2012 Втр 16:48:29
    В MVC одна точка входа в приложение. В корень папки сайта помещают файл index.php , который решает что делать с содержимым запроса. Получателем запроса является какой-то метод объекта контроллер. И этот метод в общем случае нуждается в аргументах

    Чтобы обеспечить всю необходимую для запуска метода информацию в запрос обычно помещают переменную route, которая состоит из строк разделенных прямым слэшем

    Например, в папке controllers/cont_1/cont_11 лежит файл Controller_db.php , в котором определен класс Controller_db, имеющий метод controller_link и требующий 2-х аргументов строковых

    Тогда переменная $route будет иметь такое значение : controllers/cont_1/cont_11/Controller_db/controller_link/root/erbol

    Необходима процедура которая бы выбирала из этой строки нужные данные и выстраивала бы путь от корневой папки сайта к файлу контроллера. После определения пути надо использовать процедуру которая запускает указанный метод контроллера и передает ему аргументы
  7. 30 Июня 2012 Суб 11:07:19
    MVC это совокупность классов рассортированных по функциональности на три части.

    Неудобством при использовании множества файлов является необходимость их присоединения к исполняющемуся скрипту с помощью операций include или require. Чтобы избежать этого можно определить функцию автозагрузки классов.

    Допустим все классы находятся в одной папке, назовем ее classes.


    Код:
    function __autoload($class_name)
    {
       $filename = strtolower($class_name) . '.php';
       $file = site_path . 'classes' . DIRSEP . $filename;
       
       if (!file_exists($file))
       {
          return false;
       }
       include ($file);

    }


    После того как мы вставили в программу эту функцию она будет вызываться автоматически всякий раз когда в коде будет встречаться ссылка на имя класса, требующая его определения
  8. 30 Июня 2012 Суб 11:47:26
    karaganda писал : В MVC одна точка входа в приложение. В корень папки сайта помещают файл index.php , который решает что делать с содержимым запроса. Получателем запроса является какой-то метод объекта контроллер. И этот метод в общем случае нуждается в аргументах
    В MVC про точки входа ничего нет, есть разделение приложения на 3 слоя, всё остальное - просто фичи, не связанные с MVC.
    Самое главное в MVC - не писать SQL и HTML в PHP-классах. SQL выносится или в query builder, или в отдельный класс/классы только с SQL, а в остальном коде идёт лишь использование методов этих классов (например, UserDB::getActiveUsers()), а весь HTML выносится в шаблоны. Естественно, это упрощённое изложение, и в реальных проектах возникает много трудностей куда выделить тот или иной код. Идея MVC предлагает разделять код, отвечающий за данные (описание модели, связи и т.д.), бизнес-логику (проверка доступа, логирование и т.д.) и представление (HTML это или PDF) держать раздельно.
    Понятно, что MVC-фреймворки не всегда представляют этот паттерн в чистом виде, где-то модель разделена на описание и репозиторий данных, где-то модель связана непосредственно с видом и т.д.
  9. 30 Июня 2012 Суб 12:06:06
    Вот, я на эту статью ссылался в предыдущих сообщениях

    [внешняя ссылка]
    Цитата:
    Одной из важных вещей в MVC является одна точка входа в приложение вместо кучи PHP-файлов
  10. 30 Июня 2012 Суб 12:53:30
    MVC - паттерн глобальный, используется не только в скриптовых языках типа PHP, Python, но и в Java и C#, поэтому говорить о каких-то специфических для языка вещах, вкладывая это в MVC не стоит, иначе можно нормальный MVC на нескольких точках входа (а в Symfony2, например, разные точки входа - на разные окружения и конфигурации из веба и ещё одна из консоли) принять за не-MVC.

    Но опять же, "эталонного" MVC в природе не существует, вместе с ним приходят и другие хорошие практики.
  11. 30 Июня 2012 Суб 12:56:09
    МVС - развитие процедурного стиля в программировании, я об этом говорил
  12. 01 Июля 2012 Вск 19:14:49
    В системе состоящей из множества файлов и использующей классы возникает проблема доступа к переменным класса.

    Есть несколько подходов к решению этой проблемы. Можно объявить нужные переменные класса публичными. Но это противоречит принципу инкапсуляции

    Можно создать класс для обмена данными между классами.

    Многие используют функции __set и __get

    Вот пример

    [внешняя ссылка]
  13. 04 Июля 2012 Срд 21:59:00
    Cуть MVC состоит в разделении приложения на три отдельные компоненты таким образом, что модификация каждого из них оказывает минимальное воздействие на остальные. Это приводит к существенному облегчению процесса разработки и поддержки.

    Взаимоотношения между контроллером и моделью.

    Контроллер встречает клиентский запрос, разбирает его на элементы, инициализирует объекты модели. После обработки данных моделью, он принимает её ответ и отправляет его на уровень представления.

    Пусть контроллер имеет метод index, который принимает данные и отправляет их в модель на обработку. Контроллер на основании запроса принимает решение о том какие данные нужны получить от модели и куда их отправить для отображения, какому классу шаблонов из View

    Модель — это образ реальности, из которой взято только то, что нужно для решения задачи. Модель концентрируется на логике решения основной задачи. Многие называют это бизнес-логикой, на ней лежит большая ответственность:

    1. Сохранение, удаление, обновление данных приложения. Это реализуется через операции с базой данных или через вызов внешних веб-сервисов.
    2. Инкапсуляция всей логики приложения. Абсолютно вся логика приложения без исключений должна быть сконцентрирована в модели. Не нужно какую-то часть бизнес-логики выносить в контроллер или представление.

    [внешняя ссылка]
    [внешняя ссылка]
  14. 08 Июля 2012 Вск 18:00:10
    Составил схему наподобие того как это сделано в статье

    [внешняя ссылка]



    Только у меня весь код для работы с БД находился в классе Контроллера. Для работы с БД использовал расширение PHP - класс PDO.

    После того как прочитал статью [внешняя ссылка] о том, что классы Данных представляют из себя сущности операций над данными подумал о том что взаимоотношения с БД состоят из нескольких повторяющихся действий

    1. Соединение с БД
    2. Запись строки в таблицу аудита
    3. Проверка условия на выполнение операции с помощью запроса на выборку к таблице терминалов
    4. Если условие истинно то добавляем запись в таблицу операций и в таблицу аудита
    5. Если условие ложно то добавляем запись в таблицу аудита