в кратце постараюсь описать структуру: 1. все ссылки на одну и туже страницу index.php (тоесть обрабатывается $_GET) 2. определены объекты: посетитель, магазин, страж, навигация, команда (это в упрощенном виде) - посетитель - инкапсулирует все get и пост данные - страж - создает (из базы) журнал вида (основной раздел => 4, админка => 0 ...) - страж создает объект навигации (по сути страж - это директор, который использует строителя Навигацию) - магазин - создает объект текущей страницы (через абстрактную фабрику страницы получает объект конкретной фабрики , которая создает все необходимые объекты для магазина (с учетом группы пользователя) такие как объект текущей страницы, объект новостей для текущей страницы и т.п.) - магазин инициализирует команды (напомню данные post и get инкапсулированы в посетителе) соответствие команд данной странице прописаны в объекте текущей страницы. p.s. команда - на основе патерна команда (например отослать email, или поместить товар в корзину, или изменить права группе пользователя и т.п.) - далее магаин инициализируует команду, также инициализирует объект текущей страницы - данные передаются в смарти и все отображается. !!!!!!!! Короче вопрос в том - поскольку пока только разработан вот такой костячок - может мне кто-ньть подскажет какие проблемы могут быть с такой структурой? (производительность, расширяемость, ...)
вы уж не обессудте что так текстом а не кодом... --- - - - - - - - -- -- плюс к этой же теме кто знает: проблемка с .htaccess'ом (я её выложил в разделе php для начинающих -> RewriteRule) помогите.
Все перечисленные сущности - шелуха, которая к архитектуре не имеет отношения. Попробуйте для начала реализовать момент "которая создает все необходимые объекты для магазина (с учетом группы пользователя)", вот там-то и проявится архитектура... Да, о производительности сейчас, пожалуйста, не думайте. Один безграмотный SQL запрос сожрет все ваши изыски по части производительности. Думайте в плане "работает - не работает", а также "работает красиво - работает не очень".
ммм... ну вообще-то у меня куча классов для разных страниц для разных групп пользователей... но это пока... теперь я как-раз думаю о том как бы сократить количество этих классов. /** * создает объект который будет строить объекты для данной страницы (например страницы: know-how) */ abstract class PlaceAbstractFactory{ static public function makePlaceFactory($curent_page){ switch($curent_page->name){ case 'know-how': $place_factory=new PlaceConcreteFactory();break; default : $place_factory=new PlaceBaseFactory();break; } return $place_factory; } abstract function makePlace(); public function makeNews(){return new News();} } ================================================================= class PlaceConcreteFactory extends PlaceAbstractFactory{ public function makePlace(){ return new All_main(); } public function makeNews(){ return new News(); } } class PlaceBaseFactory extends PlaceAbstractFactory{ public function makePlace(){ return new Nulla(); } } ================================================================= class Nulla{ public $commands=array(); public function execut(){} } class News{ public $title='заголовок новости'; public $date='текст новости........................'; public function execut(){ echo "<br /><hr size=5 color=grey width=50%><center><font color=grey><b> объект класса \"".__CLASS__."\"(объект с новостями для конкретной страницы) выполняет операцию execut() : </b></font></center><font color=#0000aa><i> "; echo '<table align=center width=50% height=50% border=2><tr><td>one</td><td>two</td></tr></table>'; echo "</i></font><font color=blue><b><hr size=5 color=grey width=50%></b></font>"; } } class All_main{ public $data='news'; public $ese='enother'; public $page; public $commands=array('echoTest','echoTest2'); // используется для определения какие команды разрешены на этой странице... public function __construct(){} public function execut(){ echo "<br /><hr size=5 color=grey width=50%><center><font color=grey><b> объект класса \"".__CLASS__."\"(объект с данными для конкретной страницы) выполняет операцию execut() : </b></font></center><font color=#0000aa><i> "; echo '<table align=center width=50% height=50% border=2><tr><td>one</td><td>two</td></tr></table>'; echo "</i></font><font color=blue><b><hr size=5 color=grey width=50%></b></font>"; } } ну или типа того...
Если у Вас не так много опыта в создании достаточно крупных объектно-ориентированных приложений, да и вообще в PHP программирование, попробуйте писать проще, не пытайтесь употребить как можно больше паттернов. Я сам когда то пытался разобратся с паттернами, но не на PHP, а на .NET в теории все хорошо, но что бы на практике это было эффективно нужна поддержка команды опытных в таких вещах людей. Самостоятельно лучше писать проще, добейтесь работоспобности приложения, добейтесь того что бы с легкостью мочь внедрить новую функциональность по требованию не заморачиваясь в нагромождении классов. Производительность лучше смотреть на уровне работающей странице, а не на уровне создания архитектура и прежде всего надо смотреть sql запросы. Все ИМХО конечно
Оу фак. Впервые такое вижу. Обычно люди, занимающиеся этим, не доходят до ООП, пока не научатся шаблонами юзать.