Php правильно ли это?

hellfire

Member
Joined
May 8, 2005
Messages
16
Reaction score
0
Age
38
Location
Далёка
Короче по специальности я системный програмист и web'ом стал заниматься недавно. Так как обычные приложения по своей сути сильно отличаються от web'ских у меня появились некоторые траблы:( - допустим есть часть проекта которая отвечает за добавление user'a я реализовал ее так:
1 adduser.inc.php - вывод в HTML всех форм и т.д.
2 bdadduser.inc.php - непосредственно работа с БД
потом есть еще такой скриптик main.php который в зависимости от допустим переменной action выполняет то или иное действие. Вопрос: правильно ли это? Если нет то каким образом лучше построить структуру проекта?
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
hellfire, насколько я понял ты решил перенести стиль написания, скажем, win приложений в web-программирование и реализовал некое подобие фунции main() в виде скрипта main.php. Почему бы и нет? Все довольно-таки логично и вполне имеет право на существование.
 

hellfire

Member
Joined
May 8, 2005
Messages
16
Reaction score
0
Age
38
Location
Далёка
Спасибо за поддержку а в основном как другие делают?
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
Могу посоветовать скачать какую-нибудь CMS (contetnt managment system), например Invision Power Board, и посмотреть.
Вот по этой ссылке _http://doxx.tr.dn.ua/manuals.htm была отличная статья по различным структурам сайтов, но к сожалению ее удалили.
Попытаюсь чего-нибудь найти в тему и как-только так сразу суда скину)))
 
Z

ZoRg

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

alesh.ru

А ты какой версией PHP пользуешься? если ты знаком с ООП хорошо, и пользуешься PHP5 то ты всё сделал не правильно:) ежели, ты на php4 то вполне допустимый вариант.
 

hellfire

Member
Joined
May 8, 2005
Messages
16
Reaction score
0
Age
38
Location
Далёка
Не покамисть php4, но почему для php5 и ООП это было бы не правильно?
 
A

alesh.ru

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

jonjonson

Member
Joined
Mar 4, 2004
Messages
145
Reaction score
28
Age
52
Модульность не противоречит ООП.
Причем модульность может совмещать сразу два подхода:
подход основаный на модели Mvc (модель - отображение - контроллер)
и подход на основе выделении кусков кода выполняющих схожие функции
(для ООП - это классы).

Первый подход управляет логикой программы.
Второй подход позволяет произвести рефакторинг.
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
Вот здесь лежит статья по типовым структурам сайтов (на английском):
_http://www.webstyleguide.com/site/basic_structures.html
 

jonjonson

Member
Joined
Mar 4, 2004
Messages
145
Reaction score
28
Age
52
GI80, я понял, что тема поднята не только и столько по теме структуры сайта, сколько по структуре самого web приложения.
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
jonjonson, не вижу принципиальной разницы между этими понятиями. С моей точки зрения структуру приложения стоит подгонять под структуру сайта.
 

jonjonson

Member
Joined
Mar 4, 2004
Messages
145
Reaction score
28
Age
52
GI80, если заглянуть на сторону web приложения, то можно убедиться, что файловая структура и близко может не соответствовать логической. Достаточно включить и настроить mod_rewrite и все запрашиваемые страницы могут обрабатываться одной (например index.php). Пользователь даже догадываться об этом не будет. Зато программист может отписать фронт контроллер, пейдж контроллер и для каждого пейдж контроллера - апликейшин контроллер и обрабатывать все запросы через одну точку. При этом может быть куча темплейтов, которые вовсе не будут отображать напрямую логику структуры сайта. Так как любая страница может быть разбита на хэадер, боди и фотер. Боди может также сотавлятся из множества повторяемых темплейтов. Такое разбиение является результатом пефакторинга и позволяет повторяющийся код использовать много раз. Я уже молчу о выделении кусков кода отвечающих за доступ к базе данных, обработку ошибок, фильтрацию и валидацию данных реквестов, работу с темплейтами, контроллеры, и код бизнес логики. Это тоже все группируется и выносится в отдельные файлы (модули, классы).

Примером всего сказанного может стать CMS. Она врядли своей файловой структурой соответсвует логической структуре воплащаемых в ней сайтов.
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
jonjonson, все это безусловно верно, но для простых приложений не имеет смысла. А розговор изначально был про то, правильно ли построено простое приложение. И высказывал я свое мнение именно по поводу вопроса автора темы.
 

hellfire

Member
Joined
May 8, 2005
Messages
16
Reaction score
0
Age
38
Location
Далёка
Спасибо всем наконец выработал для себя правильную структуру!
 

GI80

Member
Joined
Aug 10, 2005
Messages
178
Reaction score
14
Age
44
Location
Москва
hellfire, ну так поделись с народом своими мыслями. Видишь какое горячее обсуждение вызвал твой вопрос. ))))
 

hellfire

Member
Joined
May 8, 2005
Messages
16
Reaction score
0
Age
38
Location
Далёка
Ок значит так для начинающих вполне подходит и моя структура во-первых в ней не путаешься а во-вторых по названию файла сразу ясно что он делает, но совсем другое когда создаёться большой проект в котором учавствуют как PHP кодеры так и дизайнеры и т.д. и еще куча народа там уже помоему должно быть по другому.
Сейчас я делаю так:
Создаю каталоги:
1.HTML здесь лежат заготовки форм страничек и т.д.
2.INC здесь лежат библиотечные файлы
3.INIT а здеся файлы дя настройки
4.PICS катинки
ну покамись вот и все каталоги
потом просто в одном единственном файле все это выполняеться тоесть исполняемый скрипт всего один но здесь сразу видно один недостаток в этом скрипте очень много case'ов.
Вроде все если че не то сморозил извините.
 

jonjonson

Member
Joined
Mar 4, 2004
Messages
145
Reaction score
28
Age
52
пример как не делать много ветвящихся структур...
PHP:
// Простенький пейдж котнроллер
// --- Пути к файлам
define('PATH_CONTROLLERS', $_SERVER["DOCUMENT_ROOT"].'/controllers/');
define('PATH_VIEWS',       $_SERVER["DOCUMENT_ROOT"].'/views/');

// --- карта имеющих место страниц
$pages_map = array('default' =>'main',
                   'news'    =>'news',
                   'about'   =>'about',
                   'services'=>'services',
                   'job'     =>'job',
                   'feedback'=>'feedback');

// --- проверяем какая страница выбрана через index.php?view=???
if(isset($_GET['view']) && array_key_exists($_GET['view'], $pages_map)){
    $page = $_GET['view'];
}else{ // --- Если не выбрана ни одна из указанных в мапе страниц
    $page = $pages_map['default'];
}

// --- Фаил апликейшин контроллера для данной страницы
if(!file_exists(PATH_CONTROLLERS.$page.'.php') 
   || !is_file(PATH_CONTROLLERS.$page.'.php'))
    die('Error: File Controller Not Defined!');
require_once(PATH_CONTROLLERS.$page.'.php');

// --- Фаил отображения для данной страницы
if(!file_exists(PATH_VIEWS.$page.'.php') 
   || !is_file(PATH_VIEWS.$page.'.php'))
    die('Error: File View Not Defined!');
require_once(PATH_VIEWS.$page.'.php');
 

RomanbI4

Member
Joined
Sep 30, 2005
Messages
44
Reaction score
2
Age
42
Location
MZK Town
Сиё чудо называется FrontController (Sun об этом хорошо пишет). Нужно только хорошо обрабатывать эту переменную action. Типа удалять ../ , а то посмотрят то, что ненужно.
2 jonjonson
Тебя первый малокосо факнит с таким кодом...
 

jonjonson

Member
Joined
Mar 4, 2004
Messages
145
Reaction score
28
Age
52
RomanbI4, и каким же образом?

И еще, это не фронт контроллер, а пейдж контроллер. Фронт контроллер занимается несколько иными задачами (скажем, выполняет код связанный со всеми страницами сайта, например запускает тот же пейдж контроллер, а так же предварительный фильтр и пост фильтр).
 
Last edited by a moderator:
Top