![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
FZ14 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 2 Всего: 67 |
symfony написан на основе dependency injection контейнера (+ есть отдельный компонент от них же http://components.symfony-project.org/dependency-injection/ ). В состав входит Doctrine
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
FZ14 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.4.2010 Репутация: нет Всего: нет |
Еще интересует возможность использования паттерна Репозиторий
|
|||
|
||||
SamDark |
|
|||
![]() Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 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 — здесь я регистрирую домены |
|||
|
||||
Sentox |
|
|||
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: нет Всего: 7 |
Он имел ввиду Gateaway Row Record - шлюз записи данных или табличный шлюз, в YII и вообще в веб как в средне нагруженной логике . Скорее всего топикстартер имеет ввиду именно табличный шлюз с Record Set. Это сообщение отредактировал(а) Sentox - 12.5.2012, 00:32 |
|||
|
||||
FZ14 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.4.2010 Репутация: нет Всего: нет |
Нет, на самом деле я имел ввиду подход, в котором используются сущности предметной области(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 |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
улыбнуло тут например Добавлено через 8 минут и 14 секунд
FZ14, желание законно и правильно. от ASP или PHP или JEE не зависит. точнее - это можно применять везде, где есть соответствующие языковые возможности: классы/интерфейсы и/или обращение к классу/функции по имени и/или делегаты/передача функции в качестве параметра. Ясно, что Вы желаете высокоуровневых решений. Их есть в php фреймворках, везде по-своему. Zend Framework целиком на парадигме интерфейса основан, а управление ведется в основном через конфигурационный файл. |
|||
|
||||
FZ14 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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? |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |