[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Удобная организация кода

В разработке систем очень важно чтобы код был понятен, и чтобы смешивания кода и дизайна сводилось к минимальному. Один из подходов организации подобного я и постараюсь изложить.

Для начала нам нужно создать контроллер (я нагло одолжил понятие контроллера у мвц), который будет заправлять всем ядром нашей системы.

Controller.php

  1. abstract class Controller
  2. {
  3.  
  4. public function __construct()
  5. {
  6. if (empty($_SESSION['authKey']))
  7. {
  8. if (!empty($_REQUEST['authKey']))
  9. $_SESSION['authKey'] = $_REQUEST['authKey'];
  10. else
  11. $this->show502();
  12. }
  13. }
  14.  
  15. protected abstract function show502();
  16. }

Мы допустим к нашей системе только аутентифицированных пользователей. В качестве ключа будем использовать параметр из GET запроса. Значение его для нас не имеет пока что смысла, вы сами определите его назначение.

Заметьте что я задал контроллер как абстрактный, это означает, что отдельно этот класс использовать нельзя, и что класс содержит абстрактные методы, которые должны быть переопределены в дочерних классах. То есть мы должны создать класс который унаследует контроллер.

Steps.php

  1. class Steps extends Controller
  2. {
  3. private $Step;
  4.  
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. }
  9.  
  10. private function getStep()
  11. {
  12. return (empty($_REQUEST['step'])?1:intval($_REQUEST['step']));
  13. }
  14.  
  15. protected function show502()
  16. {
  17. die("You are not authorized to my system");
  18. }
  19.  
  20. public function provideSteps()
  21. {
  22. switch($this->getStep())
  23. {
  24. /* some switched cases */
  25. }
  26.  
  27. }
  28. }

Отлично, теперь у нас есть скелет нашего контроллера. Дальше определимся с разработкой нашей модели. Но для начала пару строк. Текущий приме, который я опишу отражает пошаговую операцию, к примеру регистрацию на определенный сервис. Первый шаг - это запрос почтового ящика и пароля, соглашение с условиями. Второй шаг - заполнение контактных данных, ну и так далее. Конечно я не буду программировать такие операции, а только покажу мой ход мыслей.

Далее я создам новый абстрактный клас, который будут наследовать каждый шаг (тоже отдельные классы).

Step.php

  1. abstract class Step
  2. {
  3. protected $authKey;
  4.  
  5. public function __construct()
  6. {
  7. $this->authKey = !empty($_REQUEST['authKey'])?$_REQUEST['authKey']:null;
  8. }
  9.  
  10. public function showPageStep()
  11. {
  12. $this->show();
  13. }
  14.  
  15. protected abstract function show();
  16. }

Любой наследуемый класс должен переопределять метод show() класса Step. Выигрыш в этом? Избавление от лишних условий, лишних объявлений переменных, и лишних вызовов функций. К тому же это хороший стиль программирования.

Итак первый шаг.

Step1.php

  1. require_once 'Step.php';
  2. class Step1 extends Step
  3. {
  4. protected function show() {
  5. include("templates/step1.php");
  6. }
  7. }

Как видим класс очень простой, но(!) в зависимости от функциональности, уверяю что он разрастется. После этого мы изменяем наш контролер следующим образом.

  1. class Steps extends Controller
  2. {
  3. private $Step;
  4.  
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. }
  9.  
  10. private function getStep()
  11. {
  12. return (empty($_REQUEST['step'])?1:intval($_REQUEST['step']));
  13. }
  14.  
  15. protected function show502()
  16. {
  17. die("You are not authorized to CLA");
  18. }
  19.  
  20. public function provideSteps()
  21. {
  22. switch($this->getStep())
  23. {
  24. case 1:
  25. $Step = new Step1();
  26. break;
  27. }
  28. $Step->showPageStep();
  29. }
  30. }

Идея в том что мы в контроллере делаем только определение через switch наших шагов, а сам функционал находится в них. Единственная функция - это отображение страницы. Удобно? Не то слово. Вам остается только написать html шаблоны и использовать в местах короткие php снипеты.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4916 сегодня - 1

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4824 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 4601 сегодня - 0

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4655 сегодня - 0

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4631 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects