Недавно я заинтересовался правильным дизайном ООП в веб-приложениях. Я думаю, что понимаю большинство принципов и шаблонов проектирования, но иногда у меня возникают проблемы с их применением на практике.
Я использую MVC и думаю, что могу проектировать контроллеры и представления в режиме ООП. Проблема, с которой я сталкиваюсь, связана с моделями. Я особенно одержим внедрением зависимостей и инверсией управления в целом. В небольших примерах это работает хорошо, но у меня возникают проблемы при разработке сложных многослойных моделей - я думаю о различных способах внедрения зависимостей в более низкие уровни и т. Д.
Поэтому я решил поискать несколько проектов, выполненных более опытными программистами ООП, которые Я мог бы учиться. Я ищу PHP веб-приложение, желательно с архитектурным шаблоном MVC. Также я не против, если у него анемичная модель (которую обычно считают антипаттерном, но в приложениях с большими объемами данных я Я часто вынужден использовать анемичные модели).
Большое спасибо.
РЕДАКТИРОВАТЬ: Я не ищу рамки, но для полного применения. Обычно фреймворки не имеют ничего общего с архитектурой модели.
Magento Commerce имеет сложные многоуровневые модели (www.magentocommerce.com), из которых вы можете почерпнуть один или два приема.
Но мой (личный) опыт работы с Magento был разочаровывающим: я работал с ним примерно в версии 0.8-1.1, и он оказался перепроектированным и плохо документированным. Попытка выяснить, как это на самом деле работает, была сложной: в вашем редакторе открывались тонны файлов, большинство из которых назывались Abstract.php. Надеюсь, с тех пор ситуация значительно улучшилась.
Я настоятельно рекомендую серию CodeIgniter с нуля на Nettuts+.
http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-profiling-benchmarking-hooks/
РЕДАКТИРОВАТЬ: @Galen
Это неверно. CodeIgniter поддерживает PHP 5.3.0, начиная с версии 1.7.2.
Если вы ищете "отличный ООП-дизайн", вы, вероятно, заглядываете не в тот угол. . PHP не очень силен в своих шаблонах ООП. Если ваше обучение и ситуация позволяют, я рекомендую вместо этого изучить проект Java.