<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fxposter&#039;s wave &#187; Propel</title>
	<atom:link href="http://blog.fxposter.org/tag/propel/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fxposter.org</link>
	<description>Stories about Ruby, JavaScript, Objective-C and other cool tools</description>
	<lastBuildDate>Sun, 30 Oct 2011 20:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Propel 1.3</title>
		<link>http://blog.fxposter.org/2008/08/20/propel-13/</link>
		<comments>http://blog.fxposter.org/2008/08/20/propel-13/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 19:53:41 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/?p=535</guid>
		<description><![CDATA[На днях вышла долгожданная новая версия достаточно популярного в узких кругах ORM - Propel 1.3. Из интересных мне нововведений: В основе Propel 1.3 лежит новый механизм работы с базами данных - PDO, который заменил Creole и привел к ощутимому повышению скорости работы. Теперь не нужно вручную загружать классы Propel и свои модели - теперь это [...]]]></description>
			<content:encoded><![CDATA[<p>На днях вышла долгожданная новая версия достаточно популярного в узких кругах ORM - <a href="http://propel.phpdb.org/trac/wiki/Users/News/Propel1.3.0">Propel 1.3</a>.</p>
<p>Из интересных мне нововведений:</p>
<ul>
<li>В основе Propel 1.3 лежит новый механизм работы с базами данных - <a href="http://php.net/pdo">PDO</a>, который заменил <a href="http://creole.phpdb.org/trac/">Creole</a> и привел к ощутимому повышению скорости работы.</li>
<li>Теперь не нужно вручную загружать классы Propel и свои модели - теперь это делается автоматически (через autoloading в PHP)</li>
<li>“Object Instance Pooling”, или, как его называет небезызвестный Фаулер - Identity Map. Причем, что самое интересное, это работает не только с retrieveByPk(), но и со всему doSelect*()-методами (в зависимости от переданных аргументов), что позволяет ускорить работу засчет отсутствия лишних запросов к бд, а также ненужности построения одинаковых обьектов несколько раз.</li>
<li>Связи один-к-одному теперь поддерживаются нативно (блин, хочу много-ко-многим!)</li>
<li>Куча мелких (и не очень) исправлений и улучшений</li>
</ul>
<p>Поподробнее можно прочитать на <a href="http://redotheweb.com/2008/08/20/propel-13-is-out/">RedoTheWeb</a>, в также на <a href="http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Upgrading">офсайте Propel</a>.</p>
<p><em><strong>PS</strong>. Сам еще не юзал, но нужно будет попробовать. На мой взгляд, самый интересный момент связан с тем, можно ли переопределить фетчинг записей, например - выбирать только записи с <code>is_hidden = false</code>, да так, чтобы переопределять пришлось только одну функцию.</em></p>
<p><strong>Update</strong>: Как написали на <a href="http://www.symfony-project.org/blog/2008/08/21/propel-1-3-doctrine-1-0-and-symfony-1-2">официальном блоге Symfony</a> - &#8220;Object Instance Pooling is not an Identity Map because the database request is still needed&#8221;. Нужно будет изучить этот вопрос.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/08/20/propel-13/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Propel &#8211; преимущества и недостатки</title>
		<link>http://blog.fxposter.org/2008/02/06/propel/</link>
		<comments>http://blog.fxposter.org/2008/02/06/propel/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 19:04:37 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2008/02/06/propel/</guid>
		<description><![CDATA[В процессе написания сайта с использованием Symfony начали проявляться недостатки этой замечательной, на мой взгляд, библиотеки&#8230; Первое, о чем хочется сказать - очень удобно реализованы связи one-to-many. Propel сама сгенерирует базовые классы, в которых такие связи будут учитываться изначально. Пользоваться очень удобно, своего кода в моделях приходится писать очень мало, а если быть более точным [...]]]></description>
			<content:encoded><![CDATA[<p>В процессе написания сайта с использованием <a href="http://www.symfony-project.org/">Symfony</a> начали проявляться недостатки этой замечательной, на мой взгляд, библиотеки&#8230;</p>
<p>Первое, о чем хочется сказать - очень удобно реализованы связи one-to-many. <a href="http://propel.phpdb.org/">Propel</a> сама сгенерирует базовые классы, в которых такие связи будут учитываться изначально. Пользоваться очень удобно, своего кода в моделях приходится писать очень мало, а если быть более точным - почти весь код в данном случае получается именно product-specific. В случае со связями one-to-one проблемы появляются - как я этого ни добивался, Propel упрямо считает эти связи такими же, как и one-to-many и генерирует неправильный код. Исправляется обычно дописыванием правильных функций вручную, благо, обычно дописать только get&lt;PrimaryKey&gt;-функции. В моем случае я вообще перестроил БД так, что таких связей у меня не оказалось, так что конкретного ничего сказать не могу.</p>
<p>Второе - &#8220;всё - обьекты&#8221;. Очень популярное в ООП высказывание подходит к Propel&#8217;у просто замечательно. :) Работа с Propel&#8217;ом заключается исключительно в работе с обьектами-записями и обьектами-таблицами. Никаких php&#8217;шных массивов (привет CI и CakePHP), одни классы и обьекты. Очень удобно. С эффективностью, правда, могут возникать огромные проблемы. Я, кстати, так до сих пор и не знаю, как эффективно выбрать (категория + количество продуктов в ней) за один запрос. Но беспокоиться об этом я буду уже потом. :)</p>
<blockquote><p>Блин, вот сидишь на работе и думаешь - сколько всего можно написать, плохого и хорошего, а приходишь домой и нифига не вспоминается.</p></blockquote>
<p>Третье - many-to-many. После того, как у меня появились такие связи, я начал очень сильно жалеть о том, что я не выбрал <a href="http://www.phpdoctrine.org/">Doctrine</a>&#8230; По сравнению с ней (она дополнительную many-to-many таблицу создает сама и сама же за ней следит) в Propel&#8217;е всё ужасно - приходится создавать вручную таблицы и дописывать в них целую кучу кода, который бы вполне могла дописать сама библиотека в базовых классах. Может в том же CI это вполне нормальным кажется (контраст другой), но здесь, когда строишь модель базы данных - мыслишь исключительно в обьектах, которые тебе будут нужны. И добавлять (а еще сопровождать) эту [непонятно откуда взявшуюся, в реале-то её нет] таблицу очень неудобно.</p>
<p>Четвертое - опять по сравнению с Doctrine&#8217;ой - нет возможности &#8220;опускаться&#8221; на уровень SQL не теряя ORM&#8217;а. Т.е. либо Propel ORM, либо Creole (PDO). В Doctrine&#8217;е есть для таких случаев <a href="http://www.phpdoctrine.org/documentation/manual?chapter=dql-doctrine-query-language">DQL</a> - достаточно удобная штучка, если поглядеть по мануалу. Вообще, Doctrine, на мой взгляд, гораздо более функциональная, мощная и удобная библиотека. Да и User Guide&#8217;ы у неё гораздо более полные и, как ни странно, user-friendly.</p>
<p>Но по сравнению со всем остальным, что я видел на PHP - Propel - это <strong>очень</strong> круто.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/02/06/propel/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: blog.fxposter.org @ 2012-02-10 05:39:58 -->
