Проектирование структуры портала

pluton

Новичок
Проектирование структуры портала

Структура:

/service/ - сервисы
/lib/ - "глобальные" классы
/html/ - document_root
/templates/ - шаблоны
config.php – "глобальный" конфиг

Папка /html/ является document_root’ом, в ней лежит один пхп файл – index.php. На сайте используется mod_rewrite. По этому любое обращение к php файлам “переадресуется” на index.php который в свою очередь подключает config.php.

В config.php происходит подключение к базе данных, установка констант и прочих настроек, некоторые из них:
- Устанавливается путь для поиска библиотек set_include_path(ROOT.'lib/');
- Объявляется функция __autoload() {require_once('class.'.$classname.'.php');}
- Весь URL разбивается по слешу, т.е. из ссылки http://example.ru/news/index.php получается массив $url = array(0=>'news', 1=>'index.php');

В папке /lib/ находятся “глобальные” классы, среди них лежит класс Control, который отвечает за подключение сервисов из папки /service/.

В файле config.php регистрируется список сервисов. Примерно так:
PHP:
$control = new Control;
//$control->register_service('права доступа', 'имя сервиса (совпадает с $url[0])');
$control->register_service(100, 'news');
//100 – доступ разрешён всем
//news – если пользовать переходит по ссылке http://example.ru/news/ то запускается сервис news.

$control->register_service(100, 'service1', );
//100 – доступ разрешён всем
// service1 – если пользовать переходит по ссылке http://example.ru/service1/ то запускается сервис service1.

// Запус сервиса:
require_once($control->start_service());
// Если с правами доступа всё нормально, то функция start_service возвращает путь к /service/(service_name)/config.php
// Будем считать что пользователь пошёл по ссылке http://example.ru/news/, и далее рассмотрим структуру на примере news.

// Если пользователь перешёл по ссылке которая не зарегистрирована, выдаём 404.
Структура папки /service/:
/service/news/
/service/news/lib/ - “локальные” классы
/service/news/config.php – “локальный” конфиг
/service/news/index.php
/service/news/newsdisplay.php

/service/service1/

И т.д.

В данный момент мы находимся в “сервисном” конфиге, т.е. /service/news/config.php
Здесь происходит регистрация страниц (она подобна регистрации сервисов)
Выглядит это примерно так:
PHP:
//$control->register_ page (‘права доступа’, ‘имя файла (совпадает с $url[1])’);
$control->register_page(100, ‘index.php’);
$control->register_page(100, ‘newsdisplay.php’);

// Подключаем страницу
require_once($control->start_page());
// Если с правами доступа всё нормально, то функция start_page() возвращает путь к /service/news/(имя файла)
//Будем считать что пользователь пошёл по ссылке - http://example.ru/news/newsdisplay.php?id=777 
// Следовательно, функция start_page() вернёт путь до /service/news/newsdisplay.php
Также при вызове start_page() устанавливается set_include_path(ROOT . $service_name . '/lib/' . PATH_SEPARATOR . get_include_path());
Т.е. в итоге include_path выглядит так: /service/news/lib/:/lib/
Отсюда видно, что при создании экземплятора класса, файл ClassName.php “ищется” сначала в “локальной” библиотеке, потом в “глобальной” т.е. приоритет стоит у локальной библиотеки, тем самым мы избавляемся от проблемы одинакового наименования классов.

Структура рассчитана под PHP 5.

Что думаете по поводу такой структуры? Хотелось бы услышать мнения умных людей.
Было бы интересно посмотреть на другие структуры, кидайте ссылки.
 

atv

Новичок
тем самым мы избавляемся от проблемы одинакового наименования классов.
Чем вызвана эта проблема?

Что думаете по поводу такой структуры?
Значительно более важными характеристиками проекта есть архитектура проекта и качество кода, а не структура каталогов.
 

pluton

Новичок
Автор оригинала: atv
Чем вызвана эта проблема?
В глобальных классах /lib/ и в локальных /service/news/lib/, классы могут иметь одинаковое название.

Автор оригинала: atv
Значительно более важными характеристиками проекта есть архитектура проекта и качество кода, а не структура каталогов.
архитектура проекта выражается классом Control
 

Alexandre

PHPПенсионер
Значительно более важными характеристиками проекта есть архитектура проекта и качество кода, а не структура каталогов.
структура каталогов - это и есть часть архитектуры проекта.
остается еще представить архитектуру классов, структуру данных и пр..
 
Сверху