<?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; Zend-Framework</title>
	<atom:link href="http://blog.fxposter.org/tag/zend-framework/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>Zend_Db: грабли в синтаксисе insert/delete/fetch</title>
		<link>http://blog.fxposter.org/2008/08/25/zend_db-sucks/</link>
		<comments>http://blog.fxposter.org/2008/08/25/zend_db-sucks/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 22:14:49 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[Zend Db]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/?p=549</guid>
		<description><![CDATA[В Zend Framework всё замечательно! &#8230;пока не начинаешь его использовать на полную катушку&#8230; Сегодня я просто приведу пример трех абсолютно различных синтаксисов, которые используются в Zend_Db для фетчинга, добавления и удаления записей. В Zend_Db везде можно использовать array в качестве where, только нигде не сказано, как этот array должен выглядеть, а аналогий не прослеживается&#8230; $productsTable [...]]]></description>
			<content:encoded><![CDATA[<p>В Zend Framework всё замечательно! &#8230;пока не начинаешь его использовать на полную катушку&#8230;</p>
<p>Сегодня я просто приведу пример трех абсолютно различных синтаксисов, которые используются в Zend_Db для фетчинга, добавления и удаления записей.</p>
<p><em>В Zend_Db везде можно использовать array в качестве where, только нигде не сказано, как этот array должен выглядеть, а аналогий не прослеживается&#8230;</em></p>
<pre><code class="php">$productsTable = new Products();</code></pre>
<p>Обычная вставка нового продукта:</p>
<pre><code class="php">$productsTable->insert(array(
    'name'  => 'Fucked Product!',
    'price' => 999.99,
  ));</code></pre>
<p>Всё OK.</p>
<p>Поиск продукта по аналогии со вставкой:</p>
<pre><code class="php">$productsTable->fetchRow(array(
    'name'  => 'Fucked Product!',
    'price' => 999.99,
  ));</code></pre>
<p>Выдаст SQL типа такого:</p>
<pre><code class="sql">SELECT products.* FROM products WHERE (name) AND (price)</code></pre>
<p>Что приведет к выдаче первого попавшегося продукта (что, естественно, нам не подходит).</p>
<p>Правильный вариант поиска продукта:</p>
<pre><code class="php">$productsTable->fetchRow(array(
    'name = ?'  => 'Fucked Product!',
    'price = ?' => 999.99,
  ));</code></pre>
<p>Удаление продукта по аналогии с поиском:</p>
<pre><code class="php">$productsTable->delete(array(
    'product_id = ?' => 1000,
  ));</code></pre>
<p>Выдаваемый SQL:</p>
<pre><code class="sql">DELETE FROM products WHERE 1000</code></pre>
<p>Приведет к удалению всех продуктов (sic!).</p>
<p>Причем самое интересное, что в случае со строкой - у вас будет ошибка, а вот в случае с числом, которое escape&#8217;ить не нужно - будут проблемы. Я с ними на днях столкнулся, и&#8230; получил пустую таблицу, в которой были важные данные. :( Благо, бэкап был.</p>
<p>Удаление продукта по аналогии со вставкой:</p>
<pre><code class="php">$productsTable->delete(array(
    'product_id' => 1000,
  ));</code></pre>
<p>Полностью аналогично предыдущему случаю.</p>
<p>Правильный вариант удаления продукта:</p>
<pre><code class="php">$productsTable->delete(
    $productsTable->getAdapter()->quoteInto('product_id = ?', 1000)
  );</code></pre>
<p><em>Вот вам и офигенный ZF. Если использовать его не постоянно, а изредка для отдельных задач - натыкаешься на подобные грабли.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/08/25/zend_db-sucks/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Использование Zend_Db_Table</title>
		<link>http://blog.fxposter.org/2008/07/20/using-zend_db_table/</link>
		<comments>http://blog.fxposter.org/2008/07/20/using-zend_db_table/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 23:10:06 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Db]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/?p=472</guid>
		<description><![CDATA[На работе пришлось столкнуться с очень не нравившейся мне ORM&#8217;кой собственного производства. Стал делать свою (ну не дурак ли, а? :)), наваял за 3 дня простенькую ORM, отображающую структуру таблиц на обьекты, не контроллируя типов. Итог получился примерно такой: класс базы данных (относледовался от mysqli, pdo использовать было нельзя) класс таблицы, хранящий в себе бд, [...]]]></description>
			<content:encoded><![CDATA[<p>На работе пришлось столкнуться с очень не нравившейся мне ORM&#8217;кой собственного производства. Стал делать свою (ну не дурак ли, а? :)), наваял за 3 дня простенькую ORM, отображающую структуру таблиц на обьекты, не контроллируя типов. Итог получился примерно такой:</p>
<ul>
<li>класс базы данных (относледовался от mysqli, pdo использовать было нельзя)</li>
<li>класс таблицы, хранящий в себе бд, и отвечающий за CRUD записей</li>
<li>класс записи, перенаправляющий методы CUD классу таблицы</li>
</ul>
<p>Примерное использование:</p>
<pre><code class="php">$table = new ArticleTable();
$record = $table-&gt;fetchOneWhere("slug = 'hello'"); // получаем существующую запись
$record-&gt;name = 'Fucking Article!';
$record-&gt;save(); // вызывает insert/update в зависимости от того, новая ли это запись
$record = $table-&gt;create(); // создаем новую запись
$record-&gt;name = 'Fucking Article2!';
$record-&gt;slug = 'fucking_article';
// ...
$record-&gt;save();</code></pre>
<p>И что-то мне это очень сильно напомнило, а именно - Zend_Db: Zend_Db_Table / Zend_Db_Table_Row. Недолго думая - выкинул нафиг свою систему и залил в проект кусок Zend Framework&#8217;а (если нужно - потом скажу, какие именно файлы нужны для полноценной работы всего компонента Zend_Db), а также решил почитать, что сейчас вообще есть в этой Zend_Db, а есть, как оказалось - довольно много:</p>
<ul>
<li>Хорошая абстракция работы с бд</li>
<li>Классы записи/таблицы</li>
<li>Поддержка fetch&#8217;инга связанных обьектов</li>
<li>Поддержка many-to-many связей (этого даже в Propel нет)</li>
</ul>
<p>На самом деле - еще есть вещи, коотрые бы можно было добавить, чтобы они работали автоматически:</p>
<ul>
<li>Валидаторы в зависимости от типов полей таблицы</li>
<li>Возможность сразу fetch&#8217;ить данные из нескольких таблиц (точнее - получить такие данные довольно легко, но вот разбрасывать их по разным обьектам и связывать эти обьекты сейчас нужно ручками, если я не ошибаюсь, но опять же - это проблем не составляет)</li>
</ul>
<p>Вроде всё. Общее впечатление - просто замечательная система. Использовать легко и приятно. :)</p>
<p><strong>Пример:</strong><br />
Сначала пойдут мои супертипы слоя (кто читал <a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420">Patters of EAA</a> - поймет):</p>
<pre><code class="php">class Db_Table extends Zend_Db_Table_Abstract {
  /**
   * @return Zend_Db_Table_Rowset_Abstract
   */
  public function fetchAllBy($key, $value) {
    $where = $this->getAdapter()->quoteInto("$key = ?", $value);
    return $this->fetchAll($where);
  }

  /**
   * @return Zend_Db_Table_Row_Abstract
   */
  public function fetchRowBy($key, $value) {
    $where = $this->getAdapter()->quoteInto("$key = ?", $value);
    return $this->fetchRow($where);
  }

  public function __call($name, $arguments) {
    if(strpos($name, 'fetchRowBy') === 0) {
      array_unshift($arguments, substr($name, 10));
      return call_user_func_array(array($this, 'fetchRowBy'), $arguments);
    }

    if(strpos($name, 'fetchAllBy') === 0) {
      array_unshift($arguments, substr($name, 10));
      return call_user_func_array(array($this, 'fetchAllBy'), $arguments);
    }

    throw new Exception("Undefined method $name");
  }
}

class Db_Record extends Zend_Db_Table_Row_Abstract {
}</code></pre>
<p>А теперь - пример использования:</p>
<pre><code class="php">class Item extends Db_Table {
  protected $_name = 'items';
  protected $_rowClass = 'ItemRecord';
  protected $_referenceMap = array(
      'Group' => array(
        'columns'       => 'groupid',
        'refTableClass' => 'Group',
        'refColumns'    => 'groupid',
      )
    );
}

class ItemRecord extends Db_Record {
}

class Group extends Db_Table {
  protected $_name = 'groups';
  protected $_rowClass = 'GroupRecord';
  protected $_dependentTables = array('Item');
}

class GroupRecord extends Db_Record {
}

$itemTable = new Item();
$item = $itemTable->fetchRowBySlug('hello');
$group = $item->findParentGroup();</code></pre>
<p>Согласитель - всё просто и удобно, не так ли?</p>
<p>Для заинтересовавшихся - очень советую проштудировать полностью <a href="http://framework.zend.com/manual/en/zend.db.html">главу о Zend_Db</a> из документации Zend Framework&#8217;а. А также - <a href="http://blog.fxposter.org/2007/05/07/zend-database-table/">мой пост про Zend_Db_Table</a>, посвященный его улучшению (правда, я не знаю, насколько он сейчас актуален, проверять нет времени :( ).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/07/20/using-zend_db_table/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Формы как обьекты, Zend_Form, MVC, Validation и многое другое</title>
		<link>http://blog.fxposter.org/2008/04/20/programming-talks/</link>
		<comments>http://blog.fxposter.org/2008/04/20/programming-talks/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 22:52:00 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Validation]]></category>
		<category><![CDATA[Zend-Framework]]></category>
		<category><![CDATA[Zend_Form]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2008/04/20/programming-talks/</guid>
		<description><![CDATA[Сегодня мы с Мишей разговорились в ICQ. Разговор получился ОЧЕНЬ длинный и офигительно интересный. Читаем под катом: fxposter (00:19:08 20/04/2008) я немного о другом fxposter (00:19:20 20/04/2008) ты используешь отдельные классы ZF в CI fxposter (00:19:32 20/04/2008) у тебя основная логика - на CI fxposter (00:19:36 20/04/2008) а мне она не нравиться mihailt (00:19:47 20/04/2008) [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы с <a href="http://mihailt.wordpress.com/">Мишей</a> разговорились в ICQ. Разговор получился ОЧЕНЬ длинный и офигительно интересный. Читаем под катом:<br />
<span id="more-409"></span></p>
<blockquote><p> fxposter (00:19:08 20/04/2008)<br />
я немного о другом</p>
<p>fxposter (00:19:20 20/04/2008)<br />
ты используешь отдельные классы ZF в CI</p>
<p>fxposter (00:19:32 20/04/2008)<br />
у тебя основная логика - на CI</p>
<p>fxposter (00:19:36 20/04/2008)<br />
а мне она не нравиться</p>
<p>mihailt (00:19:47 20/04/2008)<br />
а чем?</p>
<p>fxposter (00:20:07 20/04/2008)<br />
основная логика у ZF классная - Controller - просто зашибись и View&#8217;хи очень хорошие</p>
<p>fxposter (00:20:48 20/04/2008)<br />
но вот чтобы это всё скомпоновать (ZF) до уровня скомпонованности всего в симфе - нужно потратить прилично времени.</p>
<p>fxposter (00:21:22 20/04/2008)<br />
я тебе, кстати, могу сказать еще кое-что насчет CI</p>
<p>mihailt (00:21:28 20/04/2008)<br />
м?</p>
<p>fxposter (00:21:34 20/04/2008)<br />
вот ты используешь ZF с CI</p>
<p>fxposter (00:21:39 20/04/2008)<br />
потому что &#8220;удобно&#8221;</p>
<p>mihailt (00:21:48 20/04/2008)<br />
угу</p>
<p>fxposter (00:21:55 20/04/2008)<br />
использовать CI в дополнении к ZF ты бы не стал</p>
<p>fxposter (00:21:59 20/04/2008)<br />
потому что - фигня :)</p>
<p>mihailt (00:22:12 20/04/2008)<br />
хех</p>
<p>fxposter (00:22:23 20/04/2008)<br />
ну не то, чтобы фигня</p>
<p>fxposter (00:22:30 20/04/2008)<br />
просто - не то</p>
<p>mihailt (00:22:38 20/04/2008)<br />
хелперы бы скорее всего стал бы</p>
<p>fxposter (00:22:48 20/04/2008)<br />
какие ?)</p>
<p>fxposter (00:23:34 20/04/2008)<br />
я, кстати, в ZF недавно просматривал View Helper&#8217;ы</p>
<p>mihailt (00:23:34 20/04/2008)<br />
да многие тот же form мне цишний больше нравится</p>
<p>fxposter (00:23:46 20/04/2008)<br />
формы в ZF такие же</p>
<p>fxposter (00:23:53 20/04/2008)<br />
как и в симфе 1.0 и CI</p>
<p>fxposter (00:24:04 20/04/2008)<br />
только они уже почти deprecated :)</p>
<p>fxposter (00:24:19 20/04/2008)<br />
т.е. до появления Zend_Form такие хелперы там были</p>
<p>fxposter (00:24:23 20/04/2008)<br />
и пока еще есть</p>
<p>fxposter (00:24:52 20/04/2008)<br />
мне вот понравилось, что добавили<br />
partial partialLoop и action хелперы</p>
<p>fxposter (00:24:56 20/04/2008)<br />
в ZF</p>
<p>mihailt (00:25:15 20/04/2008)<br />
ну нифига не удобно мне кучу параметров в масиве передавать, удобней просто вызвать элемент формы и описать его</p>
<p>fxposter (00:25:36 20/04/2008)<br />
каких параметров?</p>
<p>fxposter (00:25:39 20/04/2008)<br />
а</p>
<p>fxposter (00:25:46 20/04/2008)<br />
так тебе и не нужно :)</p>
<p>fxposter (00:25:52 20/04/2008)<br />
ты описываешь форму</p>
<p>fxposter (00:25:55 20/04/2008)<br />
как угодно</p>
<p>fxposter (00:26:03 20/04/2008)<br />
в том же ini-файле можно :)</p>
<p>fxposter (00:26:52 20/04/2008)<br />
а потом пишешь<br />
$this-&gt;view-&gt;form = new MyForm();<br />
а во вьюхе:<br />
echo $this-&gt;form;</p>
<p>mihailt (00:26:53 20/04/2008)<br />
нее</p>
<p>mihailt (00:27:08 20/04/2008)<br />
вот именно это мне и не нравится</p>
<p>fxposter (00:27:12 20/04/2008)<br />
почему?</p>
<p>mihailt (00:27:20 20/04/2008)<br />
напоминает работу с XML</p>
<p>fxposter (00:27:29 20/04/2008)<br />
знаешь, чем это лучше</p>
<p>fxposter (00:27:30 20/04/2008)<br />
?</p>
<p>fxposter (00:27:41 20/04/2008)<br />
тем, что у тебя НИЧЕГО не дублируется</p>
<p>fxposter (00:27:49 20/04/2008)<br />
что ОЧЕНЬ хорошо по умолчанию</p>
<p>fxposter (00:28:10 20/04/2008)<br />
и что всё, что относится к данной форме описывается в одном месте</p>
<p>fxposter (00:28:16 20/04/2008)<br />
а не в нескольких</p>
<p>fxposter (00:28:33 20/04/2008)<br />
это - очень хорошо</p>
<p>mihailt (00:29:17 20/04/2008)<br />
ну хз мне форму рассматривать как объект почему-то не очень нравится</p>
<p>fxposter (00:29:29 20/04/2008)<br />
лучше привыкай сейчас :)</p>
<p>fxposter (00:29:36 20/04/2008)<br />
или старайся привыкнуть</p>
<p>fxposter (00:29:58 20/04/2008)<br />
потому что такие системы очень помогают</p>
<p>fxposter (00:30:08 20/04/2008)<br />
и помогают отвлечься от рутины</p>
<p>fxposter (00:30:15 20/04/2008)<br />
от проверки валидности</p>
<p>fxposter (00:30:17 20/04/2008)<br />
и прочего</p>
<p>fxposter (00:31:18 20/04/2008)<br />
получается, что у тебя вместо этих доставших input-хелперов - формы строятся как единый обьект</p>
<p>fxposter (00:31:53 20/04/2008)<br />
все уже привыкли к фразе</p>
<p>fxposter (00:31:59 20/04/2008)<br />
&#8220;оно само себя рисует&#8221;</p>
<p>fxposter (00:32:05 20/04/2008)<br />
в ООП</p>
<p>fxposter (00:32:29 20/04/2008)<br />
только не все понимают, что это можно распространить на очень многое</p>
<p>fxposter (00:32:40 20/04/2008)<br />
опиши форму - и дай ей сделать остальное за тебя</p>
<p>fxposter (00:32:50 20/04/2008)<br />
пропадет куча рутинной работы</p>
<p>mihailt (00:33:00 20/04/2008)<br />
типа кодегенерация</p>
<p>fxposter (00:33:03 20/04/2008)<br />
нет</p>
<p>fxposter (00:33:14 20/04/2008)<br />
кодогенерация - это то, что ты input&#8217;ами пишешь</p>
<p>fxposter (00:33:15 20/04/2008)<br />
:)</p>
<p>fxposter (00:33:19 20/04/2008)<br />
только вручную</p>
<p>fxposter (00:33:28 20/04/2008)<br />
а тут оно просто &#8220;себя рисует&#8221;</p>
<p>mihailt (00:33:41 20/04/2008)<br />
ну сказать та что рисовать надо</p>
<p>fxposter (00:33:41 20/04/2008)<br />
когда ты на десктопе создаешь формочку</p>
<p>fxposter (00:33:46 20/04/2008)<br />
это кодогенерация?</p>
<p>fxposter (00:33:47 20/04/2008)<br />
:)</p>
<p>fxposter (00:33:52 20/04/2008)<br />
нет</p>
<p>mihailt (00:34:03 20/04/2008)<br />
да</p>
<p>fxposter (00:34:04 20/04/2008)<br />
это выполнение отрисовки в рантайме</p>
<p>mihailt (00:34:14 20/04/2008)<br />
хмм</p>
<p>fxposter (00:34:20 20/04/2008)<br />
вот с формами так же</p>
<p>fxposter (00:34:29 20/04/2008)<br />
т.е. - оно генерит HTML</p>
<p>fxposter (00:34:37 20/04/2008)<br />
но, подумай, - HTML</p>
<p>fxposter (00:34:37 20/04/2008)<br />
!</p>
<p>fxposter (00:34:43 20/04/2008)<br />
не php-код</p>
<p>fxposter (00:34:45 20/04/2008)<br />
ничего</p>
<p>fxposter (00:34:54 20/04/2008)<br />
оно ничего не eval&#8217;ит</p>
<p>fxposter (00:35:03 20/04/2008)<br />
оно выдает просто строку результата</p>
<p>mihailt (00:35:15 20/04/2008)<br />
хмм</p>
<p>fxposter (00:35:24 20/04/2008)<br />
хотя на самом деле - на это можно смотреть по разному :)</p>
<p>fxposter (00:35:58 20/04/2008)<br />
но в любом случае - это не обычная статическая генерация кода</p>
<p>mihailt (00:36:03 20/04/2008)<br />
озадачил ты меня</p>
<p>fxposter (00:36:04 20/04/2008)<br />
это всё происходит в динамике</p>
<p>fxposter (00:36:11 20/04/2008)<br />
и это в рантайме можно менять</p>
<p>fxposter (00:36:18 20/04/2008)<br />
правда, к этому всему нужно привыкнуть</p>
<p>fxposter (00:36:34 20/04/2008)<br />
и для этого - использовать что-то типа Zend_Form</p>
<p>mihailt (00:36:44 20/04/2008)<br />
то есть больше нефига не скриптовый язык</p>
<p>fxposter (00:37:00 20/04/2008)<br />
если честно, я сталкивался с мыслью, что что-то подобное должно быть</p>
<p>fxposter (00:37:05 20/04/2008)<br />
когда делал много форм</p>
<p>fxposter (00:37:22 20/04/2008)<br />
но именно ZF открым мне глаза на то, как это можно красиво сделать :)</p>
<p>fxposter (00:37:52 20/04/2008)<br />
вообще я под генерацией кода понимаю - генерируем что-то статически</p>
<p>fxposter (00:38:13 20/04/2008)<br />
и это потом используем отдельно</p>
<p>fxposter (00:38:24 20/04/2008)<br />
как в симфе - сделать CRUD для таблицы</p>
<p>mihailt (00:38:39 20/04/2008)<br />
ты програмист-прагматик читал?</p>
<p>fxposter (00:38:39 20/04/2008)<br />
оно накидает html и php-файлов - и вот и кодогенерация</p>
<p>fxposter (00:38:41 20/04/2008)<br />
нет</p>
<p>fxposter (00:39:00 20/04/2008)<br />
но собирался</p>
<p>mihailt (00:39:03 20/04/2008)<br />
так вот так кодегенерация описывалась по другому</p>
<p>mihailt (00:39:14 20/04/2008)<br />
почитай кстати интересная штука</p>
<p>fxposter (00:39:37 20/04/2008)<br />
это одна из самых советуемых книжек на programmingbooks раньше было</p>
<p>fxposter (00:39:39 20/04/2008)<br />
была</p>
<p>mihailt (00:40:30 20/04/2008)<br />
там люди для того чтобы не писать много однообразных программ написали программу которая принимала параматры и выдавала нужный код</p>
<p>fxposter (00:40:39 20/04/2008)<br />
угу</p>
<p>mihailt (00:41:04 20/04/2008)<br />
блин</p>
<p>mihailt (00:41:18 20/04/2008)<br />
не могу объяснит у меня получается тоже что ты написал</p>
<p>fxposter (00:41:35 20/04/2008)<br />
но тогда можно считать, что если Zend_Form делает кодогенерацию, то такую же кодогенерацию делает любая функция, которая что-то возвращает :)</p>
<p>mihailt (00:41:50 20/04/2008)<br />
во</p>
<p>mihailt (00:41:53 20/04/2008)<br />
ты понял</p>
<p>fxposter (00:42:02 20/04/2008)<br />
я бы сказал так:</p>
<p>mihailt (00:42:05 20/04/2008)<br />
только не что-то</p>
<p>mihailt (00:42:12 20/04/2008)<br />
а код</p>
<p>fxposter (00:42:14 20/04/2008)<br />
нет</p>
<p>fxposter (00:42:16 20/04/2008)<br />
смотри</p>
<p>fxposter (00:42:34 20/04/2008)<br />
кодогенерация - это когда мы генерируем код на том же уровне, на котором был написан изначальный</p>
<p>fxposter (00:43:06 20/04/2008)<br />
ну или как-то так</p>
<p>mihailt (00:43:12 20/04/2008)<br />
ну типо того</p>
<p>fxposter (00:43:24 20/04/2008)<br />
а то получается, что<br />
echo &#8220;&lt;html&gt;&#8230;&#8221;;<br />
это тоже кодогенерация</p>
<p>mihailt (00:43:44 20/04/2008)<br />
неее</p>
<p>fxposter (00:43:47 20/04/2008)<br />
ага ;)</p>
<p>fxposter (00:44:06 20/04/2008)</p>
<p>echo &#8220;&lt;html&gt;&#8230;&#8221;;</p>
<p>это выражение генерирует html-код</p>
<p>fxposter (00:44:12 20/04/2008)<br />
как и Zend_Form</p>
<p>mihailt (00:45:01 20/04/2008)<br />
нее ну в принципе круто, только почему то все равно не цепляет</p>
<p>mihailt (00:45:05 20/04/2008)<br />
но хз</p>
<p>fxposter (00:45:07 20/04/2008)<br />
:-D</p>
<p>fxposter (00:45:09 20/04/2008)<br />
:)</p>
<p>mihailt (00:45:14 20/04/2008)<br />
может я передумаю</p>
<p>fxposter (00:45:23 20/04/2008)<br />
писец, вот это у нас матёро пошел разговор</p>
<p>mihailt (00:45:24 20/04/2008)<br />
говорю озадачил ты меня</p>
<p>mihailt (00:45:31 20/04/2008)<br />
да конкретно так</p>
<p>mihailt (00:45:42 20/04/2008)<br />
по гиковски</p>
<p>fxposter (00:45:48 20/04/2008)<br />
просто суть в чем</p>
<p>fxposter (00:45:57 20/04/2008)<br />
есть неправильный код</p>
<p>fxposter (00:46:05 20/04/2008)<br />
там много характеристик</p>
<p>fxposter (00:46:59 20/04/2008)<br />
но две из них:<br />
1. дублирование<br />
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файлам</p>
<p>fxposter (00:47:17 20/04/2008)<br />
вот оба эти недостатка в себе сочетает подход с input&#8217;ами</p>
<p>fxposter (00:47:26 20/04/2008)<br />
и устраняется form-обьектами</p>
<p>fxposter (00:48:03 20/04/2008)<br />
кстати</p>
<p>fxposter (00:48:06 20/04/2008)<br />
!!!</p>
<p>fxposter (00:48:10 20/04/2008)<br />
офигенный аналог</p>
<p>fxposter (00:48:18 20/04/2008)<br />
источник данных</p>
<p>fxposter (00:48:23 20/04/2008)<br />
ORM!</p>
<p>fxposter (00:48:31 20/04/2008)<br />
ну, или wrapper таблицы</p>
<p>fxposter (00:48:35 20/04/2008)<br />
или как в CI</p>
<p>fxposter (00:48:38 20/04/2008)<br />
непринципиально</p>
<p>mihailt (00:48:51 20/04/2008)<br />
ну,</p>
<p>fxposter (00:48:53 20/04/2008)<br />
вместо того, чтобы писать в разных местах селекты</p>
<p>fxposter (00:48:55 20/04/2008)<br />
и прочее</p>
<p>fxposter (00:49:06 20/04/2008)<br />
мы инкапсулируем это всё в одном обьекте</p>
<p>mihailt (00:49:11 20/04/2008)<br />
так</p>
<p>fxposter (00:49:13 20/04/2008)<br />
и работаем уже с ним</p>
<p>fxposter (00:49:21 20/04/2008)<br />
предварительно его настроив</p>
<p>fxposter (00:49:33 20/04/2008)<br />
указав имя таблицы, поля и т.д.</p>
<p>fxposter (00:49:40 20/04/2008)<br />
вот с формами - ТО ЖЕ САМОЕ</p>
<p>fxposter (00:49:41 20/04/2008)<br />
пипец</p>
<p>fxposter (00:49:44 20/04/2008)<br />
1 в 1 почти</p>
<p>mihailt (00:50:12 20/04/2008)<br />
забавно</p>
<p>mihailt (00:51:02 20/04/2008)<br />
н в принципе наверное так и должно быть</p>
<p>fxposter (00:51:14 20/04/2008)<br />
блин :)</p>
<p>fxposter (00:51:21 20/04/2008)<br />
я этот разговор выложу на блог :)</p>
<p>fxposter (00:51:32 20/04/2008)<br />
твоё имя упоминать? :)</p>
<p>mihailt (00:51:47 20/04/2008)<br />
давай</p>
<p>mihailt (00:51:59 20/04/2008)<br />
дашь травки немного</p>
<p>mihailt (00:52:00 20/04/2008)<br />
)</p>
<p>fxposter (00:52:04 20/04/2008)<br />
ага :)</p>
<p>mihailt (00:52:17 20/04/2008)<br />
продолжая</p>
<p>mihailt (00:52:29 20/04/2008)<br />
какая разница то, чего именно мы инкапсулируем?</p>
<p>fxposter (00:53:00 20/04/2008)<br />
в смысле?</p>
<p>fxposter (00:53:10 20/04/2008)<br />
я не совсем так выразился</p>
<p>mihailt (00:53:11 20/04/2008)<br />
есть объект и мы с ним работаем</p>
<p>fxposter (00:53:17 20/04/2008)<br />
не инкапсулируем</p>
<p>fxposter (00:53:24 20/04/2008)<br />
хотя и инкапсулируем то же</p>
<p>fxposter (00:53:27 20/04/2008)<br />
*тоже</p>
<p>mihailt (00:53:33 20/04/2008)<br />
нее погоди</p>
<p>mihailt (00:53:38 20/04/2008)<br />
я щас</p>
<p>fxposter (00:54:04 20/04/2008)<br />
мы убираем дублирование пряча в один обьект функции/данные и т.д., которые отвечают за нечто общее</p>
<p>mihailt (00:54:13 20/04/2008)<br />
во</p>
<p>mihailt (00:54:30 20/04/2008)<br />
а что общее нам обсолютно пофиг</p>
<p>mihailt (00:54:38 20/04/2008)<br />
абсолютно</p>
<p>fxposter (00:54:43 20/04/2008)<br />
ну естественно :)</p>
<p>fxposter (00:55:03 20/04/2008)<br />
опять же - два недостатка:</p>
<p>1. дублирование<br />
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файлам</p>
<p>fxposter (00:55:09 20/04/2008)<br />
вот они во всей красе</p>
<p>mihailt (00:55:36 20/04/2008)<br />
так а чего дублируется то?</p>
<p>fxposter (00:55:46 20/04/2008)<br />
возьмем select</p>
<p>mihailt (00:56:06 20/04/2008)<br />
я кароче походу врубился что зенд_форм хорошая вещь</p>
<p>mihailt (00:56:11 20/04/2008)<br />
:)</p>
<p>fxposter (00:56:25 20/04/2008)<br />
возьмем селект</p>
<p>fxposter (00:56:56 20/04/2008)<br />
function select(table, array columns, where)</p>
<p>fxposter (00:57:02 20/04/2008)<br />
можно еще добавить всего</p>
<p>fxposter (00:57:09 20/04/2008)<br />
order там и прочее</p>
<p>fxposter (00:57:32 20/04/2008)<br />
если у нас на каждую таблицу 1 класс - то мы и table убираем</p>
<p>mihailt (00:57:58 20/04/2008)<br />
ну и где дублирование?</p>
<p>fxposter (00:58:06 20/04/2008)<br />
и получается, чтобы вместо &#8220;SELECT columns FROM TABLE WHERE&#8221; и т.д. мы вызываем одну функцию</p>
<p>mihailt (00:58:25 20/04/2008)<br />
угу ты придумал хелпер</p>
<p>fxposter (00:58:32 20/04/2008)<br />
:)</p>
<p>fxposter (00:58:42 20/04/2008)<br />
я придумал active record еще скажи :)</p>
<p>fxposter (00:58:59 20/04/2008)<br />
это обычный table gateway (есть такой паттерн)</p>
<p>mihailt (00:59:39 20/04/2008)<br />
у банды в четырёх он есть?</p>
<p>fxposter (00:59:42 20/04/2008)<br />
нет</p>
<p>fxposter (00:59:47 20/04/2008)<br />
он у фаулера есть</p>
<p>mihailt (00:59:52 20/04/2008)<br />
ок</p>
<p>fxposter (00:59:53 20/04/2008)<br />
в Patterns of EEA</p>
<p>fxposter (00:59:55 20/04/2008)<br />
или EAA</p>
<p>fxposter (00:59:58 20/04/2008)<br />
:)</p>
<p>fxposter (01:00:12 20/04/2008)<br />
или AAE</p>
<p>fxposter (01:00:15 20/04/2008)<br />
блие</p>
<p>fxposter (01:00:17 20/04/2008)<br />
блин</p>
<p>mihailt (01:00:18 20/04/2008)<br />
типа ентерпрайз чего-то там?</p>
<p>fxposter (01:00:23 20/04/2008)<br />
ага</p>
<p>mihailt (01:00:29 20/04/2008)<br />
понял</p>
<p>fxposter (01:00:31 20/04/2008)<br />
EAA</p>
<p>fxposter (01:00:35 20/04/2008)<br />
всё-таки</p>
<p>mihailt (01:00:51 20/04/2008)<br />
не суть давай дальше</p>
<p>fxposter (01:00:55 20/04/2008)<br />
далее - насчет дублирования</p>
<p>fxposter (01:01:06 20/04/2008)<br />
тебе нужно выбрать N статей</p>
<p>fxposter (01:01:10 20/04/2008)<br />
в нескольких местах</p>
<p>fxposter (01:01:20 20/04/2008)<br />
пишешь sql - вот тебе дублирование</p>
<p>fxposter (01:01:30 20/04/2008)<br />
делаешь функцию с параметром N - вот его и нет</p>
<p>fxposter (01:01:46 20/04/2008)<br />
+ код, который работает с бд обьединен в одном месте</p>
<p>mihailt (01:01:54 20/04/2008)<br />
extends млин</p>
<p>fxposter (01:02:01 20/04/2008)<br />
;)</p>
<p>mihailt (01:02:56 20/04/2008)<br />
а ZF начинает такое делать для ХНТМL</p>
<p>fxposter (01:03:05 20/04/2008)<br />
в смысле?</p>
<p>mihailt (01:03:23 20/04/2008)<br />
в смысле зенд_форм</p>
<p>fxposter (01:03:50 20/04/2008)<br />
там, кстати, насколько я помню еще и html поддерживается :)</p>
<p>fxposter (01:04:03 20/04/2008)<br />
по крайней мере что-то с хелперами проскакивало</p>
<p>fxposter (01:04:13 20/04/2008)<br />
типа - есть поле isXhtml</p>
<p>fxposter (01:04:34 20/04/2008)<br />
и в зависимости от него оно input-хелперы раньше генерировало</p>
<p>mihailt (01:04:38 20/04/2008)<br />
в итоге получаем что пхп деву с хтмл  вобще работать не нужно будет</p>
<p>fxposter (01:04:51 20/04/2008)<br />
не совсем</p>
<p>fxposter (01:05:00 20/04/2008)<br />
вот форму нужно выводить</p>
<p>mihailt (01:05:16 20/04/2008)<br />
не смотри</p>
<p>fxposter (01:05:16 20/04/2008)<br />
ты можешь описать в самой форме -как ты её будешь выводить</p>
<p>fxposter (01:05:25 20/04/2008)<br />
таблицами</p>
<p>fxposter (01:05:29 20/04/2008)<br />
списками и т.д.</p>
<p>mihailt (01:05:36 20/04/2008)<br />
погоди</p>
<p>fxposter (01:05:40 20/04/2008)<br />
в каком-нибудь From_View</p>
<p>fxposter (01:05:44 20/04/2008)</p>
<p>mihailt (01:05:50 20/04/2008)<br />
смотри</p>
<p>fxposter (01:05:57 20/04/2008)<br />
экземпляр которого будет храниться в Zend_From</p>
<p>fxposter (01:05:58 20/04/2008)<br />
lf</p>
<p>fxposter (01:05:59 20/04/2008)<br />
да</p>
<p>mihailt (01:06:35 20/04/2008)<br />
у нас есть код который берет чего нить из бд и создаёт структуру докумунта</p>
<p>mihailt (01:06:47 20/04/2008)<br />
семантически правилный</p>
<p>fxposter (01:07:00 20/04/2008)<br />
это ты к Zend_Form</p>
<p>fxposter (01:07:06 20/04/2008)<br />
или вообще</p>
<p>fxposter (01:07:07 20/04/2008)<br />
?</p>
<p>mihailt (01:07:23 20/04/2008)<br />
вобще более глобально</p>
<p>fxposter (01:07:26 20/04/2008)<br />
ага</p>
<p>fxposter (01:07:27 20/04/2008)<br />
ну</p>
<p>mihailt (01:07:38 20/04/2008)<br />
делаем это так</p>
<p>mihailt (01:07:51 20/04/2008)<br />
после того как получили пишем</p>
<p>mihailt (01:08:14 20/04/2008)<br />
$output = new $html;</p>
<p>mihailt (01:08:40 20/04/2008)<br />
а дальше appendChild</p>
<p>fxposter (01:08:49 20/04/2008)<br />
гм</p>
<p>fxposter (01:09:00 20/04/2008)<br />
тебя куда-то не туда понесло</p>
<p>fxposter (01:09:03 20/04/2008)<br />
ты о чем?)</p>
<p>mihailt (01:09:21 20/04/2008)<br />
ну смотри что делает зенд_форм?</p>
<p>mihailt (01:09:27 20/04/2008)<br />
генерит форму</p>
<p>fxposter (01:09:41 20/04/2008)<br />
смотри</p>
<p>fxposter (01:09:46 20/04/2008)<br />
в общем случае</p>
<p>fxposter (01:09:57 20/04/2008)<br />
ты, например, наследуешь от зенд-форм</p>
<p>mihailt (01:10:00 20/04/2008)<br />
а в чем проблема сделать класс который будет весь документ генерит?</p>
<p>fxposter (01:10:13 20/04/2008)<br />
и указываешь ему, какие поля и что должно там быть</p>
<p>fxposter (01:10:29 20/04/2008)<br />
проблемы нет</p>
<p>fxposter (01:10:38 20/04/2008)<br />
тебе View&#8217;ха его и генерит по сути</p>
<p>fxposter (01:10:39 20/04/2008)</p>
<p>fxposter (01:11:23 20/04/2008)<br />
а вообще - да, можно на всё делать обьекты</p>
<p>fxposter (01:11:30 20/04/2008)<br />
собственно, DOM - это оно и есть</p>
<p>mihailt (01:11:32 20/04/2008)<br />
мне это почему то XSLT очень силно напоминает</p>
<p>mihailt (01:11:54 20/04/2008)<br />
правда я с ним не работал</p>
<p>fxposter (01:11:55 20/04/2008)<br />
только не очень удобно работать на этом уровне с тегами</p>
<p>fxposter (01:11:58 20/04/2008)<br />
я тоже</p>
<p>fxposter (01:12:07 20/04/2008)<br />
вот что-то типа такого</p>
<p>mihailt (01:13:06 20/04/2008)<br />
но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касается</p>
<p>fxposter (01:13:28 20/04/2008)<br />
$doc = new Document($content); // content - то, что получили из базы<br />
$doc-&gt;setSidebar($sidebar); // если нам нужно использовать не default&#8217;ный sidebar, например</p>
<p>fxposter (01:13:54 20/04/2008)<br />
давай опустимся несколько ниже</p>
<p>fxposter (01:13:58 20/04/2008)<br />
на уровень MVC</p>
<p>mihailt (01:14:05 20/04/2008)<br />
давай</p>
<p>fxposter (01:14:17 20/04/2008)<br />
есть модель, есть её вьюха, есть контроллер</p>
<p>mihailt (01:14:28 20/04/2008)<br />
кастати мне его в последнее время не хватает</p>
<p>mihailt (01:14:40 20/04/2008)<br />
ок</p>
<p>fxposter (01:14:52 20/04/2008)<br />
пойми, что то, что реализовано в фреймворках - это не единое применение</p>
<p>fxposter (01:15:00 20/04/2008)<br />
берем Zend_Form</p>
<p>fxposter (01:15:13 20/04/2008)<br />
модель - это поля, валидаторы и прочее</p>
<p>fxposter (01:15:21 20/04/2008)<br />
именно логически</p>
<p>mihailt (01:15:40 20/04/2008)<br />
ну</p>
<p>fxposter (01:15:44 20/04/2008)<br />
контроллер - какие-нибудь внутренние события, обработчики и т.д.</p>
<p>fxposter (01:15:56 20/04/2008)<br />
в данном случае мне придмать что-то сложно</p>
<p>fxposter (01:16:12 20/04/2008)<br />
а view&#8217;ха - это то, что из себя эта форма представляет в html</p>
<p>mihailt (01:16:32 20/04/2008)<br />
погоди ты к чему? типа куда зенд_форм?</p>
<p>fxposter (01:16:36 20/04/2008)<br />
т.е. мы разделили сам Zend_Form на MVC-составляющие</p>
<p>mihailt (01:16:42 20/04/2008)<br />
аа ну</p>
<p>fxposter (01:17:00 20/04/2008)<br />
&gt; но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касается</p>
<p>fxposter (01:17:24 20/04/2008)<br />
программист даже в Zend_Form может заняться моделью и контроллером</p>
<p>fxposter (01:17:35 20/04/2008)<br />
оставив вьюху верстальщику</p>
<p>mihailt (01:17:47 20/04/2008)<br />
именно</p>
<p>fxposter (01:17:50 20/04/2008)<br />
т.е. всё так же, как и с обычными страницами</p>
<p>fxposter (01:18:02 20/04/2008)<br />
только на следующем уровне</p>
<p>fxposter (01:18:07 20/04/2008)<br />
внутри самой страницы</p>
<p>fxposter (01:18:18 20/04/2008)<br />
и так можно описывать любые элементы страницы</p>
<p>fxposter (01:18:26 20/04/2008)<br />
хедер, футер, меню, логотип</p>
<p>fxposter (01:18:31 20/04/2008)<br />
как тебе удобно</p>
<p>fxposter (01:18:37 20/04/2008)<br />
но это в теории</p>
<p>mihailt (01:18:37 20/04/2008)<br />
ну это уже NMVC получается, нет?</p>
<p>fxposter (01:18:46 20/04/2008)<br />
что такое N?</p>
<p>mihailt (01:18:56 20/04/2008)<br />
типа nested</p>
<p>fxposter (01:18:57 20/04/2008)<br />
на практике такое вряд ли будет</p>
<p>fxposter (01:19:01 20/04/2008)</p>
<p>fxposter (01:19:13 20/04/2008)<br />
я такой терминологии не слышал, но так сказать можно</p>
<p>mihailt (01:19:46 20/04/2008)<br />
ну компонетный подход где каздй компонет проектируется по MVC</p>
<p>fxposter (01:20:01 20/04/2008)<br />
честно?</p>
<p>mihailt (01:20:08 20/04/2008)<br />
?</p>
<p>fxposter (01:20:08 20/04/2008)<br />
я с таким подходом не знаком</p>
<p>mihailt (01:20:19 20/04/2008)<br />
гм</p>
<p>fxposter (01:20:25 20/04/2008)<br />
т.е. я представляю, что оно такое</p>
<p>fxposter (01:20:34 20/04/2008)<br />
но никогда в лоб не сталкивался</p>
<p>fxposter (01:20:41 20/04/2008)<br />
почему формы сюда попали (в категорию выделяемых в отдельный обьект), а остальные компоненты - нет</p>
<p>fxposter (01:21:24 20/04/2008)<br />
ну во первых, формы - это более общее понятие, типа Page, Document и т.д., ккоторые уже на MVC как раз разделены. А еще потому, что формы нужно обрабатывать</p>
<p>fxposter (01:21:30 20/04/2008)<br />
на сервере</p>
<p>mihailt (01:22:11 20/04/2008)<br />
кстати про валидацию</p>
<p>mihailt (01:22:37 20/04/2008)<br />
в последнее время не вижу смысла в ней на стороне клиента</p>
<p>fxposter (01:22:42 20/04/2008)</p>
<p>fxposter (01:23:01 20/04/2008)<br />
ну у меня к валидации смешанные чувства</p>
<p>mihailt (01:23:08 20/04/2008)<br />
осjбенно при работе с ajax</p>
<p>fxposter (01:23:09 20/04/2008)<br />
стараюсь делать код валидным</p>
<p>fxposter (01:23:19 20/04/2008)<br />
но в принципе - не гонюсь за этим</p>
<p>mihailt (01:23:29 20/04/2008)<br />
нее</p>
<p>mihailt (01:23:37 20/04/2008)<br />
я про валидацию данных</p>
<p>mihailt (01:23:43 20/04/2008)<br />
из формы</p>
<p>fxposter (01:23:56 20/04/2008)<br />
а</p>
<p>fxposter (01:24:06 20/04/2008)<br />
я её никогда не делал</p>
<p>fxposter (01:24:14 20/04/2008)<br />
смысл вижу явно</p>
<p>fxposter (01:24:20 20/04/2008)<br />
но не делал</p>
<p>mihailt (01:24:34 20/04/2008)<br />
стандартная хрен форма-валидация(клиент)-валидация(сервер)</p>
<p>fxposter (01:24:39 20/04/2008)<br />
смысл - БЫСТРО, реально БЫСТРО сказать пользователю, что он ввел фигню</p>
<p>mihailt (01:25:30 20/04/2008)<br />
при использовани ajax  все равно не вижу</p>
<p>fxposter (01:25:50 20/04/2008)<br />
пройдет пол секунды, пока ты получишь ответ с сервера</p>
<p>fxposter (01:25:56 20/04/2008)<br />
в лучшем случае - меньше</p>
<p>fxposter (01:26:06 20/04/2008)<br />
но не абсолютно быстро</p>
<p>mihailt (01:26:34 20/04/2008)<br />
зато не будет безумных алёртов</p>
<p>fxposter (01:26:42 20/04/2008)<br />
+ нет дополнительных запросов к серваку, но для меня это на данный момент пока что не главный фактоп</p>
<p>fxposter (01:26:45 20/04/2008)<br />
фактор</p>
<p>fxposter (01:27:05 20/04/2008)<br />
&gt; зато не будет безумных алёртов<br />
не обязательно делать алерты</p>
<p>mihailt (01:27:16 20/04/2008)<br />
а если так же апдейтит див то вобще пофиг запрос всё равно есть</p>
<p>fxposter (01:27:27 20/04/2008)<br />
можно сделать сообщения об ошибках неотличимыми при серверной проверке и клиентской</p>
<p>fxposter (01:28:02 20/04/2008)<br />
я тебе могу сказать одно</p>
<p>mihailt (01:28:11 20/04/2008)<br />
типа генерить хтмл во внутрь елемента по ид?</p>
<p>fxposter (01:28:13 20/04/2008)<br />
валидация на клиенте не необходима</p>
<p>fxposter (01:28:15 20/04/2008)<br />
но удобна</p>
<p>fxposter (01:28:21 20/04/2008)<br />
да</p>
<p>fxposter (01:28:25 20/04/2008)<br />
или просто по селектору</p>
<p>fxposter (01:28:29 20/04/2008)<br />
непринципиально</p>
<p>mihailt (01:28:46 20/04/2008)<br />
ну допустим</p>
<p>mihailt (01:28:47 20/04/2008)<br />
но</p>
<p>mihailt (01:28:58 20/04/2008)<br />
получается тоже саме дублирование</p>
<p>fxposter (01:29:05 20/04/2008)<br />
ага</p>
<p>fxposter (01:29:11 20/04/2008)<br />
но на разных уровнях</p>
<p>fxposter (01:29:18 20/04/2008)<br />
это раз</p>
<p>fxposter (01:29:50 20/04/2008)<br />
и два - в теории никто не запрещает делать так, чтобы тот же Zend_From генерировал код с проверками на клиенте</p>
<p>fxposter (01:30:04 20/04/2008)<br />
т.е. описываем мы форму 1 раз</p>
<p>fxposter (01:30:13 20/04/2008)<br />
а проверки оно всё само делает</p>
<p>mihailt (01:30:36 20/04/2008)<br />
хрено получается на мой взгляд, код смешивается</p>
<p>fxposter (01:30:48 20/04/2008)<br />
нет</p>
<p>mihailt (01:30:54 20/04/2008)<br />
в смысле в самом зенд_форм</p>
<p>fxposter (01:30:57 20/04/2008)<br />
нет</p>
<p>fxposter (01:31:04 20/04/2008)<br />
Zend_Form_View</p>
<p>fxposter (01:31:11 20/04/2008)<br />
такого класса, наверное, нет</p>
<p>fxposter (01:31:16 20/04/2008)<br />
но суть понятна</p>
<p>mihailt (01:31:21 20/04/2008)<br />
:D</p>
<p>fxposter (01:31:23 20/04/2008)<br />
ты наследуешься от него</p>
<p>fxposter (01:31:45 20/04/2008)<br />
и в зависимости от валидаторов серверных - делаешь js-проверки</p>
<p>mihailt (01:32:13 20/04/2008)<br />
придумали новый класс в zf&#8217;е осталось только написать и заккомитить</p>
<p>mihailt (01:32:19 20/04/2008)<br />
:D</p>
<p>fxposter (01:32:22 20/04/2008)<br />
не думаю</p>
<p>fxposter (01:32:42 20/04/2008)<br />
всё равно там zend-form разделено на модель и представление</p>
<p>fxposter (01:32:44 20/04/2008)<br />
или нет?</p>
<p>fxposter (01:32:54 20/04/2008)<br />
я не знаю, я zend-form не использовал</p>
<p>fxposter (01:33:05 20/04/2008)<br />
я больше по symfony 1.1 forms сужу</p>
<p>fxposter (01:33:12 20/04/2008)<br />
но суть работы та же</p>
<p>fxposter (01:33:55 20/04/2008)<br />
т.е. можешь считать, что я тут говорил о неком Zend_Form, который в чем-то от настоящего Zend_Form отличается</p>
<p>fxposter (01:34:06 20/04/2008)<br />
но суть не меняет</p>
<p>mihailt (01:34:39 20/04/2008)<br />
setAction(&#8217;/usr/login&#8217;)<br />
-&gt;setMethod(&#8217;post&#8217;);</p>
<p>// Create and configure username element:<br />
$username = $form-&gt;createElement(&#8217;text&#8217;, &#8216;username&#8217;);<br />
$username-&gt;addValidator(&#8217;alnum&#8217;)<br />
-&gt;addValidator(&#8217;regex&#8217;, false, array(&#8217;/^[a-z]+/&#8217;))<br />
-&gt;addValidator(&#8217;stringLength&#8217;, false, array(6, 20))<br />
-&gt;setRequired(true)<br />
-&gt;addFilter(&#8217;StringToLower&#8217;);</p>
<p>// Create and configure password element:<br />
$password = $form-&gt;createElement(&#8217;password&#8217;, &#8216;password&#8217;);<br />
$password-&gt;addValidator(&#8217;StringLength&#8217;, false, array(6))<br />
-&gt;setRequired(true);</p>
<p>// Add elements to form:<br />
$form-&gt;addElement($username)<br />
-&gt;addElement($password)<br />
// use addElement() as a factory to create &#8216;Login&#8217; button:<br />
-&gt;addElement(&#8217;submit&#8217;, &#8216;login&#8217;, array(&#8217;label&#8217; =&gt; &#8216;Login&#8217;));<br />
?&gt;</p>
<p>fxposter (01:34:56 20/04/2008)<br />
мм</p>
<p>fxposter (01:35:08 20/04/2008)<br />
я бы всё это сделал в наследние Zend_Form&#8217;а</p>
<p>fxposter (01:35:30 20/04/2008)<br />
и мог бы потом reuse&#8217;ить такую форму логина во многих местах</p>
<p>mihailt (01:35:58 20/04/2008)<br />
ну это нормально</p>
<p>mihailt (01:36:26 20/04/2008)<br />
я про клентскую часть</p>
<p>mihailt (01:36:40 20/04/2008)<br />
$username-&gt;addValidator(&#8217;alnum&#8217;)</p>
<p>mihailt (01:37:00 20/04/2008)<br />
$username-&gt;addValidator(&#8217;alnum&#8217;,'clientside&#8217;)</p>
<p>mihailt (01:37:11 20/04/2008)<br />
ну или что то типо того</p>
<p>mihailt (01:37:30 20/04/2008)<br />
по моему нормально</p>
<p>fxposter (01:38:22 20/04/2008)<br />
да</p>
<p>fxposter (01:38:36 20/04/2008)<br />
в зенде есть zend_from_decorator</p>
<p>fxposter (01:38:47 20/04/2008)<br />
который отвечает за отрисовку этого всего в html</p>
<p>fxposter (01:38:55 20/04/2008)<br />
судя по всему</p>
<p>mihailt (01:40:00 20/04/2008)<br />
угу принимет 3 аргумента</p>
<p>mihailt (01:40:39 20/04/2008)<br />
содержимое, элемент и параметры</p>
<p>mihailt (01:40:50 20/04/2008)<br />
смотрю на ман</p>
<p>mihailt (01:41:35 20/04/2008)<br />
в принципе его для такого дела тоже можно заюзать</p>
<p>fxposter (01:43:01 20/04/2008)<br />
ну вот он и должен в зависимости от валидаторов серверных, добавленных к элементу писать дополнительный js-код</p>
<p>fxposter (01:44:41 20/04/2008)<br />
отдельные валидаторы для клиента прописывать - имхо, не есть хорошо. хотя - всё может быть.</p>
<p>fxposter (01:44:44 20/04/2008)<br />
ы</p>
<p>mihailt (01:44:51 20/04/2008)<br />
хмм</p>
<p>mihailt (01:45:01 20/04/2008)<br />
во</p>
<p>mihailt (01:45:03 20/04/2008)<br />
Zend_Form_Decorator_Errors</p>
<p>fxposter (01:45:05 20/04/2008)<br />
кстати, еще хорошо бы в валидаторы добавить<br />
Zend_Validator_View</p>
<p>fxposter (01:45:07 20/04/2008)<br />
)))))))))0</p>
<p>mihailt (01:45:12 20/04/2008)<br />
вот он должен</p>
<p>fxposter (01:45:25 20/04/2008)<br />
нет</p>
<p>fxposter (01:45:30 20/04/2008)<br />
он выводит ошибки</p>
<p>fxposter (01:45:33 20/04/2008)<br />
просто выводит</p>
<p>fxposter (01:45:38 20/04/2008)<br />
если они уже найдены</p>
<p>mihailt (01:46:46 20/04/2008)<br />
хмм</p>
<p>mihailt (01:46:49 20/04/2008)<br />
тоже верно</p>
<p>fxposter (01:46:49 20/04/2008)<br />
в общем, тут долго можно размышлять</p>
<p>fxposter (01:47:00 20/04/2008)<br />
но вряд ли это будет сделано в таком виде</p>
<p>mihailt (01:47:13 20/04/2008)<br />
даа ZF можно очень долго копать</p>
<p>fxposter (01:47:23 20/04/2008)</p>
<p>fxposter (01:47:25 20/04/2008)<br />
угу</p>
<p>fxposter (01:47:42 20/04/2008)<br />
ладно, пойду я спать</p>
<p>mihailt (01:47:57 20/04/2008)<br />
даа, чего то я тоже засиделся</p>
<p>mihailt (01:48:03 20/04/2008)<br />
но поговорили хорошо</p>
<p>fxposter (01:48:09 20/04/2008)<br />
ага</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/04/20/programming-talks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.5</title>
		<link>http://blog.fxposter.org/2008/03/17/zend-framework-15/</link>
		<comments>http://blog.fxposter.org/2008/03/17/zend-framework-15/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 14:18:53 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2008/03/17/zend-framework-15/</guid>
		<description><![CDATA[Сегодня вышел Zend Framework версии 1.5. Почитать про этот релиз поподробнее можно здесь. Самые полезные нововведения, на мой взгляд, это Zend_Form и Zend_Layout (насколько я помню, до этого в релизах его не было). Параллельно появилось два туториала для начинающих - Getting Started with Zend Framework 1.5 (до этого туториал покрывал лишь версию 1.0, насколько я [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня вышел Zend Framework версии 1.5. Почитать про этот релиз поподробнее можно <a href="http://devzone.zend.com/article/3270-Zend-Technologies-Releases-Zend-Framework-1.5">здесь</a>. Самые полезные нововведения, на мой взгляд, это <a href="http://devzone.zend.com/article/3030-Lifting-the-Skirt-on-Zend-Framework-1.5---Zend_Form">Zend_Form</a> и Zend_Layout (насколько я помню, до этого в <strong>релизах</strong> его не было).</p>
<p>Параллельно появилось два туториала для начинающих - <a href="http://akrabat.com/zend-framework-tutorial/">Getting Started with Zend Framework 1.5</a> (до этого туториал покрывал лишь версию 1.0, насколько я помню) и <a href="http://framework.zend.com/wiki/display/ZFDEV/Official+ZF+QuickStart">Zend Framework QuickStart</a>. К сожалению, обещанный именно к этому релизу Zend_Build в сам релиз не попал, но в инкубаторе он <a href="http://framework.zend.com/svn/framework/trunk/incubator/library/Zend/Build/">есть</a>, так что надежда на скорый выпуск этого компонента всё же остается. Посмотрим, посмотрим.</p>
<p><em><strong>PS</strong>. <a href="http://framework.zend.com/">Сайт Zend Framework&#8217;а</a> также обновился. :) </em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/03/17/zend-framework-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework and Ubuntu</title>
		<link>http://blog.fxposter.org/2008/03/04/zend-framework-and-ubuntu/</link>
		<comments>http://blog.fxposter.org/2008/03/04/zend-framework-and-ubuntu/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 20:57:28 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2008/03/04/zend-framework-and-ubuntu/</guid>
		<description><![CDATA[Со следующей версии Ubuntu (а это, как мы все помним, будет 8.04 или Hardy Heron) в неё будет включен Zend Framework. Правда не уточняется, что на самом деле значат слова &#8220;to be an integral part of the Ubuntu distribution&#8221; - либо ZF просто будет включен в поставку по умолчанию (что, на мой взгляд, не бог [...]]]></description>
			<content:encoded><![CDATA[<p>Со следующей версии <a href="http://www.ubuntu.com/">Ubuntu</a> (а это, как мы все помним, будет 8.04 или Hardy Heron) в неё <a href="http://andigutmans.blogspot.com/2008/02/zend-framework-to-be-part-of-ubuntu.html">будет включен</a> <a href="http://framework.zend.com/">Zend Framework</a>. Правда не уточняется, что на самом деле значат слова &#8220;to be an integral part of the Ubuntu distribution&#8221; - либо ZF просто будет включен в поставку по умолчанию (что, на мой взгляд, не бог весть какое достоинство), либо у убунтовцев и Canonical действительно на ZF есть планы (создание средств разработки с использованием ZF, типа Zend Studio, либо построение системы управления Ubuntu&#8217;ой на PHP и ZF, во что, лично я не сильно верю)&#8230; В общем - я достаточно смутно представляю, какие преимущества от этого &#8220;сотрудничества&#8221; получат пользователи Ubuntu, но&#8230; Поживем - увидим.</p>
<p><em><strong>PS</strong>. Mac&#8217;и поставляются с RoR, а Ubuntu - с ZF. :)<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/03/04/zend-framework-and-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ZF Code Generation</title>
		<link>http://blog.fxposter.org/2007/12/21/zf-code-generation/</link>
		<comments>http://blog.fxposter.org/2007/12/21/zf-code-generation/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 20:01:59 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/12/21/zf-code-generation/</guid>
		<description><![CDATA[Разработчики Zend Framework решили последовать примеру популярных на данный момент не-PHP&#8217;шных фреймворков (в частности, ROR) и решили добавить в ZF работу с консолью и генерацию кода. Подробно можно прочитать тут (англ). Хочется отметить комментарий Александра Макарова: Разработчики ZF последовали моде и скорее всего включат в ZF 1.5 консольный генератор кода. Что означает возможность билда из [...]]]></description>
			<content:encoded><![CDATA[<p>Разработчики Zend Framework решили последовать примеру популярных на данный момент не-PHP&#8217;шных фреймворков (в частности, ROR) и решили добавить в ZF работу с консолью и генерацию кода. Подробно можно прочитать <a href="http://devzone.zend.com/article/2856-Zend-Framework--Coming-soon-to-a-Command-Line-near-You">тут</a> (англ).</p>
<p>Хочется отметить комментарий <a href="http://rmcreative.ru/">Александра Макарова</a>:</p>
<blockquote><p>     Разработчики ZF последовали моде и скорее всего включат в ZF 1.5 консольный генератор кода. <u>Что означает возможность билда из метаданных и наличие столь модного сейчас скаффолдинга.</u></p></blockquote>
<p>Позволю себе немного не согласится. Если походить по ссылкам и почитать про <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Console+-+Wil+Sinclair">Zend_Console</a>, <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Build+-+Wil+Sinclair">Zend_Build</a>, <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Build+for+Core+-+Wil+Sinclair">Zend_Build for Core</a>, то можно заметить первое несоответствие - нигде в них не содержится Zend_Db в зависимостях ни в каком виде. Это раз. Два - структура ZF очень продуманная и гибкая, таким образом предполагать, что CRUD будет реализован простым наследованием от Zend_Controller_Action, с которым будут связаны определенного вида View&#8217;хи, по меньшей мере - странно. Мне видится реализация  такого CRUD&#8217;а только, если у нас появится 2 дополнительных набора элементов - поля для таблиц (что-то типа Zend_Db_Table_Field) и widget&#8217;ы (типа ), которые будут вызваны для этих полей при их рендеринге (Zend_View_Widget, хелперы тут не подойдут немного, ИМХО, хотя в данном случае могу ошибаться). Вот тогда всё будет точно следовать стилю ZF. :) Но тогда назревает другая проблема - если есть Field&#8217;ы (с валидаторами и прочим), то почему не сделать нормальный <a href="http://ru.wikipedia.org/wiki/ORM">ORM </a>(заюзав, естественно паттерн <a href="http://en.wikipedia.org/wiki/Active_record_pattern">ActiveRecord</a>). А, насколько я знаю, полноценная реализация ORM в roadmap ZF не входит никаким боком. Более того - они явно говорили, что реализовывать её не будут (ссылку найти сейчас не могу, к сожалению). Так что, ИМХО, Scaffolding&#8217;у в ZF не быть&#8230;</p>
<p><em><strong>PS</strong>. А как вообще можно перевести Scaffolding на русский язык?&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/12/21/zf-code-generation/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Выбор PHP фреймворка</title>
		<link>http://blog.fxposter.org/2007/12/18/choosing-php-framework/</link>
		<comments>http://blog.fxposter.org/2007/12/18/choosing-php-framework/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 16:44:31 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/12/18/choosing-php-framework/</guid>
		<description><![CDATA[В виду некоторых обстоятельств (пока не буду говорить, каких) полностью перейти на Python + Django и забить на PHP не получается. В связи с этим вопрос - какой из PHP-фреймворков выбрать для изучения и последующего использования. Кандидаты: Zend Framework - в принципе, если его основательно помучать, то за пару недель-месяц из него можно сделать неплохой [...]]]></description>
			<content:encoded><![CDATA[<p>В виду некоторых обстоятельств (пока не буду говорить, каких) полностью перейти на Python + <a href="http://www.djangoproject.com/">Django</a> и забить на PHP не получается. В связи с этим вопрос - какой из PHP-фреймворков выбрать для изучения и последующего использования.</p>
<p>Кандидаты:</p>
<ol>
<li><a href="http://framework.zend.com/">Zend Framework</a> - в принципе, если его основательно помучать, то за пару недель-месяц из него можно сделать неплохой каркас для быстрой разработки сайтов. Преимущества - красивый код, продуманность в архитектуре, гибкость (хотя во многих случаях она и не нужна). Недостатки - относительно медленный, нет всякой &#8220;помощи&#8221; разработчикам (типа скаффолдинга и прочего), нет реализации ActiveRecord.</li>
<li><a href="http://codeigniter.com/">CodeIgniter</a> - хороший, простой, и, самое главное, быстрый  фреймворк. По скорости обгоняет все остальные (вчера был тест ZF/CakePHP/CI на линуксе с помощью ab - CI выиграл, причем с ощутимым отрывом). Есть скаффолдинг, есть куча плагинов, некоторые - достаточно интересные (в частности, <a href="http://www.rapyd.com/">rapyd</a>).</li>
<li><a href="http://cakephp.org/">CakePHP</a> - у этого фреймворка куча поклонников, много материалов по использованию и рабочих приложений. В недостатки можно записать жесткую тормознутость - он чуть ли не в 1,5-2 раза тормознее ZF (интересно, с чего бы это?).</li>
<li>Советовали еще Limb, Solar, но пока их не смотрел. Еще что-нибудь предложите?</li>
</ol>
<p><em><strong>PS</strong>. Пока что склоняюсь к CI&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/12/18/choosing-php-framework/feed/</wfw:commentRss>
		<slash:comments>94</slash:comments>
		</item>
		<item>
		<title>Zend Framework Library</title>
		<link>http://blog.fxposter.org/2007/10/18/zend-framework-library/</link>
		<comments>http://blog.fxposter.org/2007/10/18/zend-framework-library/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 13:10:05 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/10/18/zend-framework-library/</guid>
		<description><![CDATA[Те, кто читают меня довольно давно, знают, что я отношусь к той категории программистов, которые любяят и умеют использовать то, что было сделано раньше - фреймворки, библиотеки и т.д. Так вот, сегодня я поведу разговор о целесообразности использования Zend Framework при построении сайта по схеме MVC и о целесообразности его использования вообще. Zend Framework в [...]]]></description>
			<content:encoded><![CDATA[<p>Те, кто читают меня довольно давно, знают, что я отношусь к той категории программистов, которые любяят и умеют использовать то, что было сделано раньше - фреймворки, библиотеки и т.д. Так вот, сегодня я поведу разговор о целесообразности использования Zend Framework при построении сайта по схеме MVC и о целесообразности его использования вообще.</p>
<h4>Zend Framework в MVC</h4>
<p>Для начала - моя цитата:</p>
<blockquote><p>А я все больше склоняюсь к Django. :)<br />
А по поводу ZF меня все больше посещают такие мысли: стройным и красивым он кажется только на первый взгляд и именно из-за того, что у нас по сути получается набор классов, которые нам самим предложено связывать. Другие фреймворки нам предоставляют уже готовую структуру каталогов и некоторые “настройки по умолчанию”, а в Zend’е это все нужно делать самому. И в итоге после настройки фреймворка под себя он все больше становится “некрасивым” и похожим на другие фреймворки. :)</p></blockquote>
<p>Вот это моя позиция. Могу добавить еще одно - для того, чтобы юзать этот фреймворк, прийдется еще достаточно много всего под него дописать.</p>
<h4>Zend Framework как библиотека классов</h4>
<p>А вот как библиотеку классов ZF использовать не только можно, но и нужно. Я вот на себе прочувствовал, насколько удобно работать с почтой через Zend_Mail по сравнению со стандартными функциями imap_*. Да и Zend_Db и Zend_Log юзать достаточно удобно.</p>
<p>Писал недавно скрипт, который загружает файлы с POP3-сервера, парсит их и загружает в бд. Сначала написал просто функциями стандартными, а потом переписал с использованием ZF - код стал намного боле красивым, более легким в понимании и сократился в 2 раза. Так что в этой ипостаси ZF, на мой взгляд, идеальное замена многих модулей стандартной библиотеки PHP. Также радует наличие во фреймворке работы со всякими Web-сервисами - Amazon, del.icio.us, Flickr, и это еще не полный список, к тому же разработчики ZF планируют развивать фреймворк именно в этом направлении.</p>
<p>Для себя я вывод относительно ZF сделал такой - иметь на своем серваке однозначно. Даже если если я не буду его использовать для MVC - я буду использовать отдельные его части внутри самого сайта, благо, с этой задачей ZF справляется на отлично.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/10/18/zend-framework-library/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Мысли о Web Programming Languages</title>
		<link>http://blog.fxposter.org/2007/08/28/web-programming-languages/</link>
		<comments>http://blog.fxposter.org/2007/08/28/web-programming-languages/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 23:04:31 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java-EE]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby-On-Rails]]></category>
		<category><![CDATA[Zend-Framework]]></category>
		<category><![CDATA[Zope]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/08/28/web-programming-languages/</guid>
		<description><![CDATA[Какие языки сейчас используются в веб-программировании? Навскидку я могу составить такой список: C#, Java EE, Python, Ruby, PHP, Perl. JavaScript брать в расчет не буду - сейчас я хочу поговорить именно о server-side языках. C# - первая версия этого языка появилась в 2000 году, для веба стал использоваться с приходом ASP.NET, который вышел в 2002м [...]]]></description>
			<content:encoded><![CDATA[<p>Какие языки сейчас используются в веб-программировании? Навскидку я могу составить такой список: <a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336809.aspx">C#</a>, <a href="http://java.sun.com/javaee/">Java EE</a>, <a href="http://www.python.org/">Python</a>, <a href="http://www.ruby-lang.org/">Ruby</a>, <a href="http://php.net/">PHP</a>, <a href="http://www.perl.org/">Perl</a>. JavaScript брать в расчет не буду - сейчас я хочу поговорить именно о server-side языках.</p>
<p><strong>C#</strong> - первая версия этого языка появилась в 2000 году, для веба стал использоваться с приходом <a href="http://www.asp.net/">ASP.NET</a>, который вышел в 2002м году.</p>
<p><strong>Java EE</strong> -  первая версия, которая называлась J2EE и имела версию 1.2, вышла в далеком1991м году. Следующая версия 1.3 была выпущена аж через 11 лет. Сейчас новые версии выпускаются гораздо чаще. Используется в основном для разработки веб-сервисов. По крайней мере я не встречал мелкие или небольшие компании, которые писали бы &#8220;просто сайты&#8221; на Java EE.</p>
<p><strong>Python</strong> - на самом деле достаточно древний язык. Первая версия языка была выпущена в 1990м году. Когда его начали достаточно сильно использовать в веб-приложениях сказать трудно. Можно считать, что в интернет он вошел с появлением таких легких и быстрых фреймворков, как <a href="http://www.djangoproject.com/">Django</a>/<a href="http://turbogears.org/">Turbogears</a> и т.д. В таком случае получается что в инете он с 2004-2005-го года. На самом деле все было несколько раньше, но приход в интернет в то время был не совсем очевиден. Фреймворк <a href="http://zope.org/">Zope</a>, который был изначально нацелен на интернет, был выпущен в 1995-1997 годах. Точнее на данный момент сказать не могу. Но еще раз повторюсь - это <strong>не было</strong> массовым явлением.</p>
<p><strong>Ruby</strong> - разработан в 1995м году. В интернете стал использоваться с появлением, ясное дело, <a href="http://www.rubyonrails.org/">Ruby On Rails</a>, который вышел в 2004-м году.</p>
<p><strong>PHP</strong> - эдакий старичок программирования сайтов. Первая версия, которая называлась PHP/FI вышла в 1994м. А тот PHP, который мы знаем появился в 1997м году с выходом PHP3 и именно с этого момента он начал набирать популярность как язык для веб-разработки.</p>
<p><strong>Perl</strong> - вышел в 1987м году, а вот когда появился в вебе - для меня остается тайной. Я этот язык особо никогда не любил и уж тем более никогда не использовал. Пользуются ли им еще в вебе - пользуются, но, как мне кажется, популярность этого языка неуклонно падает.</p>
<p>Теперь, собственно, к чему я вел это все. Выводы по Perl&#8217;у я делать не могу, а вот по всем остальным языкам получается интересная картина. C#/Python/Ruby - заявили массово о себе совсем недавно, причем их массовое распространение связанно с написанными для них фреймворками (ASP.NET/Django и компания/ROR). Java - в вебе используется только Java EE, и, хоть и появилась она давно, сейчас явно не собирается скидывать обороты. PHP - язычок, который пришел в веб сам, для которого до недавнего времени и фреймворков то не было, а те что были - их не использовали.</p>
<p>Я веду к тому, что все современные языки в вебе используют фреймворки, причем используют чуть ли не в обязательном порядке (да, вы можете на руби писать веб приложение, не используя рельсы, но <strong>никто</strong> этого при здравом уме делать не будет). А вот писать приложение на PHP не используя никаких уже созданных компонент - вполне обычное дело. И народ наоборот не хочет использовать фреймворки аргументируя это тем, что они &#8220;слишком сложные&#8221;, &#8220;тормозные&#8221; и т.д.  И очень большая часть сайтов делается потом непонятно как&#8230; посмотришь код - убиться хочется.  такое впечатление, что фраза &#8220;PHP портит нормальных программистов&#8221; - это не бред, а самая настоящая реальность.</p>
<p>В итоге (все ИМХО):</p>
<ol>
<li>смысла использовать PHP, если есть возможность использовать что-то более современное, - <strong>НЕТ</strong></li>
<li>если уж использовать PHP, то с умом - не писать все сначала, а выбрать удобные компоненты для разработки нужного вам веб приложения</li>
</ol>
<p>Из PHP Framework&#8217;ов я бы посоветовал выбрать <a href="http://framework.zend.com/">Zend Framework</a>, как наиболее конфигурируемый и обьектно-ориентированный. Для себя я выбрал именно его. Но в нем есть одно &#8220;но&#8221; - если вы в качестве wrapper&#8217;а для DB собираетесь использовать зендовские классы - вам возможно прийдется сменить хостера, так как нужна будет поддержка PDO/PDO_MySQL/PDO_PgSQL, которая, как мне кажется, не у всех хостеров есть.<br />
<em><strong>PS</strong>. Лично мне сейчас нравится:</em></p>
<ul>
<li><em>для веб-разработки для себя - Python, для заказов - PHP + Zend_Framework </em></li>
<li><em>для desktop-gui-приложений - C#</em></li>
<li><em>для консольных - C++</em></li>
</ul>
<p><em><strong>PPS</strong>. Пару часов назад гуглил украинских хостеров. Завтра буду узнавать - есть ли у них поддержка PHP &gt;= 5.1.3 и PDO_MySQL (требования к Zend Framework&#8217;у). Посмотрим, какие результаты это даст. Кто знает хороших укр. хостеров - отписывайтесь, составлю табличку - кто и что поддерживает.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/08/28/web-programming-languages/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>С++09 и Zend_Translate</title>
		<link>http://blog.fxposter.org/2007/06/19/c09-zend_translate/</link>
		<comments>http://blog.fxposter.org/2007/06/19/c09-zend_translate/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 20:29:06 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Zend-Framework]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2007/06/19/c09-zend_translate/</guid>
		<description><![CDATA[Сегодня у нас на повестке дня два линка: Перевод черновика стандарта C++09 на русский язык. Для тех, кто не в курсе - в C++09 - новый стандарт языка C++, который будет выпущен в 2009-м году (логично, не правда ли :)), стандарт определяет саму структуру языка + его стандартную библиотеку (STL). Пример использования Zend_Translate под звучным [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня у нас на повестке дня два линка:</p>
<ol>
<li><a href="http://forum.vingrad.ru/forum/s/bc1c019fa7f74ac1f2cab344fc23ddd1/topic-158819/kw-std-c++.html">Перевод черновика стандарта C++09 на русский язык.</a> Для тех, кто не в курсе - в C++09 - новый стандарт языка C++, который будет выпущен в 2009-м году (логично, не правда ли :)), стандарт определяет саму структуру языка + его стандартную библиотеку (STL).</li>
<li><a href="http://www.developer.com/tech/article.php/3683571">Пример использования Zend_Translate</a> под звучным названием &#8220;Build Multi-lingual Websites With the Zend Framework&#8221;. Я пока что не дочитал, но просмотрел. На первый взгляд - ни о каком &#8220;build websites&#8221; речи не идет, просто показывается, как юзать Zend_Translate, но может кому-то будет полезно.</li>
</ol>
<p><em><strong>PS.</strong> Я уже дома. turboNOMAD, давай линк.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2007/06/19/c09-zend_translate/feed/</wfw:commentRss>
		<slash:comments>1</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-09 02:07:54 -->
