Вы реализовали часть шаблона проектирования DAO (не фабрика, даже когда он возвращает пользовательские экземпляры).DAO обычно заботится о поиске, создании, сохранении, редактировании и удалении объектов одного и того же вида.
См. Также шаблон хранилища - хранилище является более высоким уровнем абстракции - оно может запрашивать несколько DAOоднако для получения ожидаемых результатов один DAO должен запросить только одну таблицу базы данных.
PHP персистентные фреймворки
- Doctrine ORM - Java-подобный ORM, без зависимостей, см. примеры (методы получения / установки должны быть необязательными)
- Kohana ORM - ActiveRecord, часть веб-инфраструктуры Kohana 3.0
- Zend_Table - ActiveRecord, часть Zend Framework
- было немного других (google orm / activerecord / persistence for php)
Затем вы можете определить отношения и работать с объектами, например так:
//ORM/ActiveRecord way
$user = Repo :: get ( "users" ) -> find_by_id ( $user_id );
$user = User :: find_by_id ( $user_id );
$user_payments = $user -> payments;
$user_articles = $user -> articles;
вместо:
$user_repository = Repo :: get ( "users" );
$articles_repository = Repo :: get ( "articles" );
$user = $user_repository -> find_by_id ( $user_id );
$user_articles = $articles_repository -> find_all_for ( $user );
ActiveRecord намного проще и проще в использовании, но не очень ООП.Методы, такие как:
- $ user -> save (),
- $ user -> delete (),
- User :: find_all ()
- User :: find_by_id ($ id)
просто не должен быть частью класса User, потому что объект не обязан знать, как найти все экземпляры, как их хранить вв любом случае - это хорошее начало, заставляет задуматься о богатой доменной модели.Итак - перейдите на ActiveRecord и после того, как вы достигнете некоторого навыка, попробуйте переключиться на настоящий ORM
Другие языки
- Для JAVA проектов, Google для JPA, Hibernate, Toplink, iBatis.
- Для Ruby , есть класс ActiveRecord
- , и если вы действительно любите ООП, Google для настойчивости Smalltalk: -)