Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MVC, dependency injection, ORM в PHP 
:(
    Опции темы
FZ14
Дата 16.3.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Всем привет!
Хочу знать на сколько сейчас развиты mvc фрэймворки в php? В частности Zend Framework.

1) Есть ли возможность там реализовать ORM, к примеру, как в ASP.NET MVC с помощью Entity Framework. Интересуют подходы Database First(Когда на основе существующей бд генерируется модель) и Code First(Когда можно написать код классов и свойств, соответствующих сущностям бд и в последствии будет создана бд).

2) И второй вопрос, с помощью каких инструментов можно реализовать dependency injection?

В разработке на ASP.NET MVC принято разделять модель предметной области(domain model) от модели представления. Как обстоят с этим дела у php-фрэймворков?
Посоветуйте какое-нибудь решение, которое было бы максимально приближено к ASP.NET MVC.
PM MAIL   Вверх
solenko
Дата 16.3.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 2
Всего: 67



symfony написан на основе dependency injection контейнера (+ есть отдельный компонент от них же http://components.symfony-project.org/dependency-injection/ ). В состав входит Doctrine 


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
FZ14
Дата 16.3.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Еще интересует возможность использования паттерна Репозиторий
PM MAIL   Вверх
SamDark
Дата 16.3.2012, 21:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 0
Всего: 38



FZ14
1) Есть. Database First чаще всего в виде Active Record. Генератор кода по БД есть, например, в Yii. Также есть отдельные от фреймворков ORM. Наиболее мощные Doctrine и Propel.
2) Разве для DI нужны какие-то инструменты? Если речь про контейнер, то реализации есть в ZF2, Symfony2. Есть и отдельные контейнеры (поискать можно на github, например).

domain model никто не запрещает выделять. Это ведь просто набор классов.

EntityRepository есть в Doctrine, но вообще, как по мне, реализуется и так довольно легко.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Sentox
Дата 12.5.2012, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: нет
Всего: 7



Цитата(SamDark @ 16.3.2012,  21:20)
FZ14
1) Есть. Database First чаще всего в виде Active Record. Генератор кода по БД есть, например, в Yii. Также есть отдельные от фреймворков ORM. Наиболее мощные Doctrine и Propel.

Он имел ввиду Gateaway Row Record - шлюз записи данных или табличный шлюз, в YII и вообще в веб как в средне нагруженной логике . Скорее всего топикстартер имеет ввиду именно табличный шлюз с Record Set.

Это сообщение отредактировал(а) Sentox - 12.5.2012, 00:32
PM MAIL   Вверх
FZ14
Дата 12.5.2012, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Цитата(Sentox @ 12.5.2012,  00:27)
Цитата(SamDark @ 16.3.2012,  21:20)
FZ14
1) Есть. Database First чаще всего в виде Active Record. Генератор кода по БД есть, например, в Yii. Также есть отдельные от фреймворков ORM. Наиболее мощные Doctrine и Propel.

Он имел ввиду Gateaway Row Record - шлюз записи данных или табличный шлюз, в YII и вообще в веб как в средне нагруженной логике . Скорее всего топикстартер имеет ввиду именно табличный шлюз с Record Set.


Нет, на самом деле я имел ввиду подход, в котором используются сущности предметной области(Entity), причем эти сущности ничего не знают о том, что происходит извне, а так же абстрактный DataMapper(репозиторий), который умеет сохранять, извлекать эти сущности. С помощью Dependency Injection абстрактный репозиторий связывается с реализацией(к примеру, есть интерфейс IProductRepository, который определяет набор методов, а реализация - ProductRepository, которую можно заменить легко на любую другую).

В Doctrine 2 этого нет. Там реализован паттерн DataMapper, но в контроллере(К примеру, Symfony 2) идет работа с конкретным репозиторием:

$this->getDoctrine()->getRepository('ExampleBundle:Product'). А сохранением занимается не сам маппер, а EntityManager.

Репозиторий - должен быть фасадом для доступа к данным.

К примеру, я хочу заменить текущее хранилище, на другую реализацию, как это сделать?
Я же хочу работать только с интерфейсом, а реализация должна быть скрыта, тогда можно будет спокойно написать другую реализацию, реализовав определенный интерфейс.


Возможно, я не совсем ясно выражаюсь, но тот подход, о котором я говорю описан в следующих докладах на ZendConf:
http://www.zfconf.ru/2010/topics/zend-fram...-mvc-fat-model/
http://www.youtube.com/watch?v=YtN5udggsow...mp;noredirect=1
http://www.youtube.com/watch?v=kr7yJZkmjps...mp;noredirect=1

Но как это сделать, там не говорится.
Возможно кто-нибудь покажет примеры такого подхода:)

Здесь можно посмотреть, как это реализовано в других платформах:
http://www.kewney.com/posts/software-devel...ository-pattern


Это сообщение отредактировал(а) FZ14 - 12.5.2012, 10:14
PM MAIL   Вверх
baldina
Дата 12.5.2012, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(FZ14 @  16.3.2012,  18:40 Найти цитируемый пост)
интересует возможность использования паттерна

улыбнуло

Цитата(FZ14 @  12.5.2012,  07:31 Найти цитируемый пост)
Возможно кто-нибудь покажет примеры такого подхода

тут например

Добавлено через 8 минут и 14 секунд
Цитата(FZ14 @  12.5.2012,  07:31 Найти цитируемый пост)
я хочу заменить текущее хранилище, на другую реализацию, как это сделать?
Я же хочу работать только с интерфейсом, а реализация должна быть скрыта

FZ14, желание законно и правильно. от ASP или PHP или JEE не зависит. точнее - это можно применять везде, где есть соответствующие языковые возможности: классы/интерфейсы и/или обращение к классу/функции по имени и/или делегаты/передача функции в качестве параметра.
Ясно, что Вы желаете высокоуровневых решений. Их есть в php фреймворках, везде по-своему. Zend Framework целиком на парадигме интерфейса основан, а управление ведется в основном через конфигурационный файл
PM MAIL   Вверх
FZ14
Дата 13.5.2012, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2010

Репутация: нет
Всего: нет



Вот здесь описывается паттерн репозиторий:

http://design-pattern.ru/patterns/repository.html
http://blog.byndyu.ru/2011/01/domain-drive...repository.html

Используя в контроллере привязку к Doctrine 2 - абстракции доступа к данным добиться невозможно.
Не понимаю, почему в symfony 2 она так интегрирована, что Entity Manager мы вызываем прямо из контроллера, жестко привязывая весь код именно к Doctrine 2.

$this->getDoctrine... 
$em->flush(), вместо того, чтобы использовать $repository->save($entity);

Кто-нибудь может привести пример реализации паттерна repository в Symfony 2? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.