<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Комментарии на: UP. Первая итерация</title>
	<atom:link href="http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Fri, 30 Jul 2010 23:03:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>От: west</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-1020</link>
		<dc:creator>west</dc:creator>
		<pubDate>Sun, 25 Jan 2009 01:33:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-1020</guid>
		<description>Поддержу товарища толстые контроллеры, которые делают запросы к базе данных пусть даже через абстракцию не хорошо.
Такой код будет трудно поддерживать, просто получается уже не MVC а VC</description>
		<content:encoded><![CDATA[<p>Поддержу товарища толстые контроллеры, которые делают запросы к базе данных пусть даже через абстракцию не хорошо.<br />
Такой код будет трудно поддерживать, просто получается уже не MVC а VC</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Alexander</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-1000</link>
		<dc:creator>Alexander</dc:creator>
		<pubDate>Thu, 18 Dec 2008 09:02:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-1000</guid>
		<description>&#62;&#62; "Во-первых - спасибо за развернутый комментарий"
Спасибо вам за интересный материал.

&#62;&#62; "При подходе “$user = $users-&#62;getById($userId);” вобщем-то ничего не меняется, за исключением того, что конструкция на основе фасада: “Doctrine::getTable( ‘User’ )” заменена самописным враппером коллекции $users…"

Как же не меняется? Пропадает объектная ориентированность, одна из главных прелестей её - возможность расширения класса Пользователей, его доработки. Например буквально на днях в левом проекте (не моём, я на подхвате и вообще не на ЗФ) я расширил класс пользователя в класс Персоны и Участники (суть их не важна, но они весьма специфичны) в каждый класс добавив функционал реализующий им свойственное поведение. При этом для хранения данных используется таже таблица что и для родителя-класса Пользователи (отличаются только группы пользователей). При этом у меня весь функционал по авторизации и прочим вещам которые можно было делать с пользователями остался и в этих объектах (так нужно было по задаче).  Я понимаю что все это можно сделать и на доктрин, но это будет имхо совсем не ооп, а контроллеры "растолстеют", что не есть гуд. Либо я чего то не понимаю и доктрин provides не меньшую гибкость?

Также, насчет того что 

&#62;&#62; "Нагромождать же поверх класса на основе ОРМ еще класс для “чистого” ООП я не решился, так как ни логики ни поведения это не меняет…"

 - я считаю что любое нагромождение стоит того чтобы быть нагроможденным, если оно делает более логичной, удобной для вас, вас в перспективе, и разработчиков которые, возможно будут с этим кодом работать, структуру приложения, архитектурную его суть. Конечно если в вашей модели объекту пользователя в принципе никогда не понадобится быть чем-то более чем массивом данных... такого ваше решение, как архитектора (и вполне возможно я просто недостаточно далеко смотрю и вы правы), но я хотел высказать своё мнение по этому поводу для тех, кто может быть будет читать эту статью и пытаться сделать что-то подобное на ЗФ.

&#62;&#62; "А насчет подчеркиваний (_), то они мне не нравятся как пережитки РНР4, где приватных и защищенных методов и свойств просто небыло…"

Хм. никогда не думал с этой точки зрения того что это пережиток. Часто попадаются фрагменты когда пишут $this-&#62;mApples (m_Apples) типа из си люди там где можно обращаться к члену класса без $this-&#62; ну это бред полнейший конечно. Подходы типа $this-&#62;s_AppleName имеют право на жизнь, хотя конечно просто разработчик должен быть достаточно опытен чтобы грамотно распоряжатся нетипизированностью языка, тогда в типовых приставках нет никакого смысла.
Однако... по-моему опыту работы (в основном чтение исходников зф и кода написанно по такому же принципу, поиск багов и ответов на вопросы) подчеркивания в именах переменных существенно облегчают понимание ООП структуры и делают более прозрачным сам класс, его средства и цели. Но это конечно дело субъективное.

&#62;&#62; "Да и стандарт оформления кода у меня вобщем-то довольно иной чем у Зенд, а подстраиваться в проекте на стандарты одной из библиотек думаю неверно…"

А я как-то не заметил особо другой разницы, поэтому подумал что с подчеркиваниями это что-то вроде недосмотра =). Чтож, просмотрю еще раз ваш код и буду ждать продолжения в надежде найти интересные и удобные решения в разработке.

* чет у меня тут заглючило, поэтому если будут дубликаты комментариев - прошу прощения.</description>
		<content:encoded><![CDATA[<p>&gt;&gt; &#8220;Во-первых - спасибо за развернутый комментарий&#8221;<br />
Спасибо вам за интересный материал.</p>
<p>&gt;&gt; &#8220;При подходе “$user = $users-&gt;getById($userId);” вобщем-то ничего не меняется, за исключением того, что конструкция на основе фасада: “Doctrine::getTable( ‘User’ )” заменена самописным враппером коллекции $users…&#8221;</p>
<p>Как же не меняется? Пропадает объектная ориентированность, одна из главных прелестей её - возможность расширения класса Пользователей, его доработки. Например буквально на днях в левом проекте (не моём, я на подхвате и вообще не на ЗФ) я расширил класс пользователя в класс Персоны и Участники (суть их не важна, но они весьма специфичны) в каждый класс добавив функционал реализующий им свойственное поведение. При этом для хранения данных используется таже таблица что и для родителя-класса Пользователи (отличаются только группы пользователей). При этом у меня весь функционал по авторизации и прочим вещам которые можно было делать с пользователями остался и в этих объектах (так нужно было по задаче).  Я понимаю что все это можно сделать и на доктрин, но это будет имхо совсем не ооп, а контроллеры &#8220;растолстеют&#8221;, что не есть гуд. Либо я чего то не понимаю и доктрин provides не меньшую гибкость?</p>
<p>Также, насчет того что </p>
<p>&gt;&gt; &#8220;Нагромождать же поверх класса на основе ОРМ еще класс для “чистого” ООП я не решился, так как ни логики ни поведения это не меняет…&#8221;</p>
<p> - я считаю что любое нагромождение стоит того чтобы быть нагроможденным, если оно делает более логичной, удобной для вас, вас в перспективе, и разработчиков которые, возможно будут с этим кодом работать, структуру приложения, архитектурную его суть. Конечно если в вашей модели объекту пользователя в принципе никогда не понадобится быть чем-то более чем массивом данных&#8230; такого ваше решение, как архитектора (и вполне возможно я просто недостаточно далеко смотрю и вы правы), но я хотел высказать своё мнение по этому поводу для тех, кто может быть будет читать эту статью и пытаться сделать что-то подобное на ЗФ.</p>
<p>&gt;&gt; &#8220;А насчет подчеркиваний (_), то они мне не нравятся как пережитки РНР4, где приватных и защищенных методов и свойств просто небыло…&#8221;</p>
<p>Хм. никогда не думал с этой точки зрения того что это пережиток. Часто попадаются фрагменты когда пишут $this-&gt;mApples (m_Apples) типа из си люди там где можно обращаться к члену класса без $this-&gt; ну это бред полнейший конечно. Подходы типа $this-&gt;s_AppleName имеют право на жизнь, хотя конечно просто разработчик должен быть достаточно опытен чтобы грамотно распоряжатся нетипизированностью языка, тогда в типовых приставках нет никакого смысла.<br />
Однако&#8230; по-моему опыту работы (в основном чтение исходников зф и кода написанно по такому же принципу, поиск багов и ответов на вопросы) подчеркивания в именах переменных существенно облегчают понимание ООП структуры и делают более прозрачным сам класс, его средства и цели. Но это конечно дело субъективное.</p>
<p>&gt;&gt; &#8220;Да и стандарт оформления кода у меня вобщем-то довольно иной чем у Зенд, а подстраиваться в проекте на стандарты одной из библиотек думаю неверно…&#8221;</p>
<p>А я как-то не заметил особо другой разницы, поэтому подумал что с подчеркиваниями это что-то вроде недосмотра =). Чтож, просмотрю еще раз ваш код и буду ждать продолжения в надежде найти интересные и удобные решения в разработке.</p>
<p>* чет у меня тут заглючило, поэтому если будут дубликаты комментариев - прошу прощения.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Алексей Токарь</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-997</link>
		<dc:creator>Алексей Токарь</dc:creator>
		<pubDate>Thu, 18 Dec 2008 08:30:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-997</guid>
		<description>Во-первых - спасибо за развернутый комментарий :)
Теперь что касается ООП подхода. Конструкция “$user = Doctrine::getTable( ‘User’ )-&gt;find( 1 );” на самом деле ничего более чем "полноценный" ООП код по типу "$user = new Uer( 1 );", но так как этот ОРМ не позволяет использовать такую структуру, то приходится использовать некоторые допущения. Нагромождать же поверх класса на основе ОРМ еще класс для "чистого" ООП я не решился, так как ни логики ни поведения это не меняет...
При подходе "$user = $users-&gt;getById($userId);" вобщем-то ничего не меняется, за исключением того, что конструкция на основе фасада: "Doctrine::getTable( ‘User’ )" заменена самописным враппером коллекции $users...

А насчет подчеркиваний (_), то они мне не нравятся как пережитки РНР4, где приватных и защищенных методов и свойств просто небыло...
Да и стандарт оформления кода у меня вобщем-то довольно иной чем у Зенд, а подстраиваться в проекте на стандарты одной из библиотек думаю неверно...</description>
		<content:encoded><![CDATA[<p>Во-первых - спасибо за развернутый комментарий <img src='http://blog.azazel.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Теперь что касается ООП подхода. Конструкция “$user = Doctrine::getTable( ‘User’ )->find( 1 );” на самом деле ничего более чем &#8220;полноценный&#8221; ООП код по типу &#8220;$user = new Uer( 1 );&#8221;, но так как этот ОРМ не позволяет использовать такую структуру, то приходится использовать некоторые допущения. Нагромождать же поверх класса на основе ОРМ еще класс для &#8220;чистого&#8221; ООП я не решился, так как ни логики ни поведения это не меняет&#8230;<br />
При подходе &#8220;$user = $users->getById($userId);&#8221; вобщем-то ничего не меняется, за исключением того, что конструкция на основе фасада: &#8220;Doctrine::getTable( ‘User’ )&#8221; заменена самописным враппером коллекции $users&#8230;</p>
<p>А насчет подчеркиваний (_), то они мне не нравятся как пережитки РНР4, где приватных и защищенных методов и свойств просто небыло&#8230;<br />
Да и стандарт оформления кода у меня вобщем-то довольно иной чем у Зенд, а подстраиваться в проекте на стандарты одной из библиотек думаю неверно&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Alexander</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-996</link>
		<dc:creator>Alexander</dc:creator>
		<pubDate>Wed, 17 Dec 2008 13:28:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-996</guid>
		<description>Много мыслей по поводу самого подхода, пожалуй слишком много, поэтому не буду пытаться из воспроизвести. Насчет реализации.
На мой взгляд хорошо структурированное (в контексте веб программирования с использованием ЗендФреймворка) ооп приложение должно быть именн объектно (сущностно что ле) ориентированно, чем в вашем коде. Может быть это у вас промежуточный вариант и вы собираетесь как это это всё поменять после какой нибудь итерации с рефакторингом, однако если нет... то - мое мнение, что работать с таблицами бд напрямую из контроллеров - это не совсем хорошо. То есть на грубом примере - есть сущность пользователь. Есть соотвествующая модель/класс/объект User. Мы работаем именно с это сущностью используя её интерфейс.
Делать "$user = Doctrine::getTable( 'User' )-&#62;find( 1 );" - не тру. Я совсем мало и мимолетом работал с доктрин (крутая штука, но я все равно использую встроенный ОРМ, лучше уж попарится и дописать эти нестед сетс и прочие вкусности, на мой взгляд), но мне кажется что можно и с доктрин все это дело более ООП-грамотно обставить.
То есь не писать $user = Doctrine::getTable( 'User' )-&#62;find( 1 ); а писать 
$user = $users-&#62;getById($userId); где $users у нас child от абстрактного набор строк из таблицы а $user - child одной абстрактной строки из бд (это в том случае если нам нужны просто таблицы). таким образом мы получаем не массивы данных, а объекты (что не мешает нам сделать -&#62;toArray() при необходимости).

Ещё - в зенд фреймворк везде приватные и протектед члены классов и методы начинаются с _ подчеркивания  предлагаю придерживаться этого - хорошо когда все написано в одном стандарте (и ничто не заставляет вас их перемешивать)</description>
		<content:encoded><![CDATA[<p>Много мыслей по поводу самого подхода, пожалуй слишком много, поэтому не буду пытаться из воспроизвести. Насчет реализации.<br />
На мой взгляд хорошо структурированное (в контексте веб программирования с использованием ЗендФреймворка) ооп приложение должно быть именн объектно (сущностно что ле) ориентированно, чем в вашем коде. Может быть это у вас промежуточный вариант и вы собираетесь как это это всё поменять после какой нибудь итерации с рефакторингом, однако если нет&#8230; то - мое мнение, что работать с таблицами бд напрямую из контроллеров - это не совсем хорошо. То есть на грубом примере - есть сущность пользователь. Есть соотвествующая модель/класс/объект User. Мы работаем именно с это сущностью используя её интерфейс.<br />
Делать &#8220;$user = Doctrine::getTable( &#8216;User&#8217; )-&gt;find( 1 );&#8221; - не тру. Я совсем мало и мимолетом работал с доктрин (крутая штука, но я все равно использую встроенный ОРМ, лучше уж попарится и дописать эти нестед сетс и прочие вкусности, на мой взгляд), но мне кажется что можно и с доктрин все это дело более ООП-грамотно обставить.<br />
То есь не писать $user = Doctrine::getTable( &#8216;User&#8217; )-&gt;find( 1 ); а писать<br />
$user = $users-&gt;getById($userId); где $users у нас child от абстрактного набор строк из таблицы а $user - child одной абстрактной строки из бд (это в том случае если нам нужны просто таблицы). таким образом мы получаем не массивы данных, а объекты (что не мешает нам сделать -&gt;toArray() при необходимости).</p>
<p>Ещё - в зенд фреймворк везде приватные и протектед члены классов и методы начинаются с _ подчеркивания  предлагаю придерживаться этого - хорошо когда все написано в одном стандарте (и ничто не заставляет вас их перемешивать)</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Олег</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-986</link>
		<dc:creator>Олег</dc:creator>
		<pubDate>Fri, 28 Nov 2008 20:03:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-986</guid>
		<description>Про итерацию не совсем понял ,а в целом понравилось</description>
		<content:encoded><![CDATA[<p>Про итерацию не совсем понял ,а в целом понравилось</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: chrysalis</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-972</link>
		<dc:creator>chrysalis</dc:creator>
		<pubDate>Fri, 14 Nov 2008 14:55:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-972</guid>
		<description>Добавлю Вам в копилку еще и от себя благодарность.
Всегда не хватало учителя, наставника. А самоучение не всегда приводит к правильным результатам и в итоге иногда чувствую, что дальше развиваться не знаю в каком направлении, хотя знаний вроде хватает.
Очень приятно и доступно написано. И главное - как для меня, то здесь есть именно те основы (и не только), которые так необходимы.
С увлечением слежу :)
Терпения Вам в этом деле.</description>
		<content:encoded><![CDATA[<p>Добавлю Вам в копилку еще и от себя благодарность.<br />
Всегда не хватало учителя, наставника. А самоучение не всегда приводит к правильным результатам и в итоге иногда чувствую, что дальше развиваться не знаю в каком направлении, хотя знаний вроде хватает.<br />
Очень приятно и доступно написано. И главное - как для меня, то здесь есть именно те основы (и не только), которые так необходимы.<br />
С увлечением слежу <img src='http://blog.azazel.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Терпения Вам в этом деле.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Алексей Токарь</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-970</link>
		<dc:creator>Алексей Токарь</dc:creator>
		<pubDate>Sun, 09 Nov 2008 13:52:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-970</guid>
		<description>Ух.. Я б юниттесты с удовольствием писал бы, но времени едва хватает на эти статьи и реализацию...
Вообще UP подразумевает покрытие юниттестами написанный код за несколько дней до окончания итерации - вместе с предоставлением готового кода на суд пользователей</description>
		<content:encoded><![CDATA[<p>Ух.. Я б юниттесты с удовольствием писал бы, но времени едва хватает на эти статьи и реализацию&#8230;<br />
Вообще UP подразумевает покрытие юниттестами написанный код за несколько дней до окончания итерации - вместе с предоставлением готового кода на суд пользователей</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Сотомайор</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-969</link>
		<dc:creator>Сотомайор</dc:creator>
		<pubDate>Sat, 08 Nov 2008 22:37:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-969</guid>
		<description>Привет. Во-первых, спасибо за столь интересное и детальное описание процесса разработки. Во-вторых, желаю удачи и воли довести дело до конца :-) В третьих, интересует - собираешься ли использовать юнит-тесты, функциональные тесты или какой-то другой вид автоматического тестирования? Каким образом вообще будет проходить контроль качества?</description>
		<content:encoded><![CDATA[<p>Привет. Во-первых, спасибо за столь интересное и детальное описание процесса разработки. Во-вторых, желаю удачи и воли довести дело до конца <img src='http://blog.azazel.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> В третьих, интересует - собираешься ли использовать юнит-тесты, функциональные тесты или какой-то другой вид автоматического тестирования? Каким образом вообще будет проходить контроль качества?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Снайпер</title>
		<link>http://blog.azazel.org.ua/2008/11/up-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f/#comment-968</link>
		<dc:creator>Снайпер</dc:creator>
		<pubDate>Fri, 07 Nov 2008 17:20:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.azazel.org.ua/?p=228#comment-968</guid>
		<description>Замечательно вы описали результаты итерации ! И главное лаконично и понятно! Даже вопросов не возникает ! Спасибо!</description>
		<content:encoded><![CDATA[<p>Замечательно вы описали результаты итерации ! И главное лаконично и понятно! Даже вопросов не возникает ! Спасибо!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
