8

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

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

Итак, я решил искать некоторые проекты, сделанные более опытными программистами ООП который я мог бы изучить. Я ищу веб-приложение PHP, желательно с архитектурным шаблоном MVC. Также я не против, если у него анемичная модель (которая обычно считается антипаттерной, но в тяжелых приложениях, основанных на данных, мне часто приходится использовать анемичные модели).

Большое спасибо.

EDIT: Я не ищу рамки, но для полного приложения. Структуры обычно не имеют большого отношения к архитектуре модели.

ответ

1

Magento Commerce имеет сложные многоуровневые модели (www.magentocommerce.com), которые вы можете получить от трюка или двух.

Но мой (личный) опыт работы с Magento был разочаровывающим: я взломал его вокруг версии 0.8-1.1, и он появился над спроектированным и плохо документированным. Попытка выяснить, как она на самом деле работала, была сложной: в конечном итоге вы получите тонны файлов в своем редакторе, большинство из которых называется Abstract.php. Надеюсь, с тех пор ситуация значительно улучшилась.

+0

Привет, спасибо за предложение, это действительно может быть хорошо. Я думаю, что «вы закончите с тонкими файлами, открытыми в вашем редакторе, большинство из которых называется Abstract.php» - это цена, которую вы должны заплатить, если хотите хороший дизайн. К сожалению, хорошие проекты ООП обычно не тривиальны. С другой стороны, сложность не гарантирует качество! : D – Tomik

-1

Рамки CodeIgniter приходит на ум в качестве достойного источника исследования

+0

Спасибо, но я не ищу рамки, но для полного приложения. Рамочные системы относятся к моделям только неглубоко (или вообще не относятся). – Tomik

+3

@Tomik Как так? Это похоже на широкомасштабное заявление о «рамках» в целом. По моему опыту, CodeIgniter отлично справляется с разделением слоев, будучи легким и незагроможденным. – treeface

+0

Вы должны шутить. CodeIgniter - это далеко не идеальный дизайн ООП. Просто посмотрите на зависимость от _everything_ над суперъектом CodeIgniter. –

0

Я настоятельно рекомендую CodeIgniter с нуля серии на Nettuts +.

http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-profiling-benchmarking-hooks/

EDIT: @Galen

Это не правильно. CodeIgniter поддерживает PHP 5.3.0 с версии 1.7.2.

+0

CodeIgniter работает на PHP 4.3, что означает, что он по-прежнему использует старую и ограниченную объектную модель PHP4. – Tomik

4

Код воспламенителя php4, я не рекомендую его слишком много. С тех пор PHP OOP изменился. Лучшей идеей будет kohana

Я узнал много, проверив Konstrukt. Создатель полуактивный на SO тоже =)

0

Если вы ищете «отличный дизайн ООП», вы, вероятно, смотрите в неправильный угол. PHP не очень силен в своих образцах ООП. Если ваше исследование и ситуация позволяют, я рекомендую вам вместо этого изучить проект Java.

+2

Люди продолжают говорить мне об этом, однако они не могут объяснить причину. Итак, какая существенная функция OOP PHP промахивается? – Tomik

+1

пламябайт? множество примеров шаблонов в PHP в Интернете (google для «php patterns»). Начиная с 5.3, язык очень способен. Я думаю, что это больше связано с навыками программистов в проекте, а не с самим языком, который влияет на превосходство в дизайне ... – Steve

+1

«Более чистый» язык OO не обеспечивает превосходный дизайн. Это зависит от дизайнера. И я не знаю, когда вы в последний раз смотрели на PHP, но с версии 5 его объектные возможности довольно прочны. –

1

Я рекомендую вам взглянуть на Symfony 2.

Это, вероятно, лучший дизайн PHP проект, который вы найдете. Это SOLID, DRY и использует шаблоны там, где это применимо.

+1

Symfony замечательный, и посмотрите, что это проект-догр. –

1

В чем проблема, с которой вы сталкиваетесь с «Модели»? Вы говорите об Injection Dependency, но это действительно не имеет ничего общего с концепцией «Модели» в контексте MVC. Если вы ищете примеры того, как управлять и передавать зависимые объекты иерархии объектов, вы можете взглянуть на Symfony 2.Внедрение контейнеров зависимостей 0.

+1

Я знаю контейнер Symfony DI, это неплохо. Но то, что я хочу увидеть, - это реализация DI IN ACTION. Например, даже с полным контейнером DI вам все равно нужно решить проблему инъекции самого контейнера. Что такое модель с DI? Вам необходимо DI для качественной реализации многослойных моделей. – Tomik

Смежные вопросы