<?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>engoyan &#187; development</title>
	<atom:link href="http://www.engoyan.com/tag/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.engoyan.com</link>
	<description>engoyan&#039;s stikers ^-^</description>
	<lastBuildDate>Mon, 12 Dec 2011 05:18:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Web Engine: Router</title>
		<link>http://www.engoyan.com/206/web-engine-router.html</link>
		<comments>http://www.engoyan.com/206/web-engine-router.html#comments</comments>
		<pubDate>Sun, 29 Nov 2009 17:27:52 +0000</pubDate>
		<dc:creator>vadim engoyan</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web engine]]></category>

		<guid isPermaLink="false"> http://www.engoyan.com/?p=206</guid>
		<description><![CDATA[

			     
                 
				

Итак, для начала создадим задачу Router под нужным проектом в системе управления проектами TaskUP  и запустим эту задачу (про TaskUP будет отдельная статья). Начнем с простого, а именно с рутера — класса [...]]]></description>
			<content:encoded><![CDATA[<p>

			    <a href="/wp-content/uploads/2009/11/router2.png" class="highslide"  onclick="return hs.expand(this, {captionId: 'caption-for-P2060'})"> 
                <img src="/wp-content/uploads/2009/11/router2-150x150.png" alt="Router" border="0" id="P2060" title="Router" align="right" style="" /></a> 
				

Итак, для начала создадим задачу Router под нужным проектом в системе управления проектами <a href="http://www.TaskUP.com" target="_blank" title="TaskUP Projects Management System" >TaskUP</a>  и запустим эту задачу (про TaskUP будет отдельная статья). Начнем с простого, а именно с рутера — класса отвечающего за обработку URI. К тому же Router в движке, согласно нашей схемы, будет загружаться после конфигурации.</p>
<p>К конфигурации отдельно на будем уделять времени, а будем его касаться по мере надобности.</p>
<p>Класс должен уметь обрабатывать адреса следующего вида:<br />
<img src=" http://www.engoyan.com/wp-content/uploads/2009/11/route.jpg" alt="Типичный URL" title="Типичный URL" width="501" height="72" class="alignnone size-full wp-image-256" /><br />
<span id="more-206"></span></p>
<p>Как мы уже договорились наш класс Engine будет состоять из статических методов, которые будут возвращать синглтон вспомогательных классов. Наш класс Router один из таких классов.</p>
<p>Файл <strong>Engine.php</strong>:</p>
<pre class="brush: php">
class Engine {

	protected static $_conf;
	protected static $_route;

	public static function conf(){
		if(self::$_conf===NULL){
			self::$_conf =  Array();
		}
		return self::$_conf;
	}

	public static function route(){
		if(self::$_route===NULL){
			self::loadClass(&#039;Router&#039;);
			self::$_route = new Router;
		}
		return self::$_route;
	}	

	public static function loadClass($class_name){
		require_once(&quot;lib/&quot; .&quot;$class_name&quot;.&quot;_class.php&quot;);
	}
}
</pre>
<p>Как видим из файла в данном случае это статический метод <strong>route()</strong>. Внутри него подгружается класс <strong>Router</strong>.</p>
<p>Подгружаемый класс Router:</p>
<pre class="brush: php">
class Router {

	protected static $_URL;
	protected static $_N;
	protected static $_TAIL;

	function __construct(){
	  $uri = $_SERVER[&#039;REQUEST_URI&#039;];

	  $uri = explode(&#039;/&#039;,$uri);
	  if(!$uri[0]) array_shift($uri);

	  foreach($uri as $id =&gt; $u){
	  	if(is_numeric($u)){
	  		self::$_N[]=$u;
	  	}elseif(!self::$_TAIL &amp;&amp; !self::$_N){
	  		self::$_URL[]=$u;
	  	}else{
	  		self::$_TAIL[]=$u;
	  	}
	  }
	}

	public static function u($pos){
		return array_shift(array_slice(self::$_URL,$pos,1));
	}

	public static function n($pos){
		return array_shift(array_slice(self::$_N,$pos,1));
	}

	public static function t($pos){
		return array_shift(array_slice(self::$_TAIL,$pos,1));
	}
}
</pre>
<p>Переменные $_URL, $_N, $_TAIL защищены. В них складываются элементы адресной строки. Вспомогательные публичные методы u(), n() и t() дают доступ к этим переменным соответственно.</p>
<p>Пример использования:</p>
<pre class="brush: php">
public static function run(){
	self::route()-&gt;u(2); //  list 

	self::route()-&gt;n(0); // 49

	self::route()-&gt;t(-1); // desc
}
</pre>
<p>Конечно это не окончательное содержание этих файлов. Оно будет измяться и пополняться по мере наращивания функционала фреймфорка. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.engoyan.com/206/web-engine-router.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web engine: структура</title>
		<link>http://www.engoyan.com/137/web-engine-%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d0%b0.html</link>
		<comments>http://www.engoyan.com/137/web-engine-%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d0%b0.html#comments</comments>
		<pubDate>Sun, 22 Nov 2009 22:06:12 +0000</pubDate>
		<dc:creator>vadim engoyan</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[общие]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web engine]]></category>

		<guid isPermaLink="false"> http://www.engoyan.com/?p=137</guid>
		<description><![CDATA[

			     
                 
				

Итак, движок-цмс будем называть Web Engine, пока в голову не придет что-то по оригинальнее.
Главные цели которые будем ставить при проектировании движка:

скорость и простота разработки (при его помощи)
минимальный но легко расширяемый функционал
скорость работы

Из этого [...]]]></description>
			<content:encoded><![CDATA[<p>

			    <a href="/wp-content/uploads/2009/11/Web-Engine.png" class="highslide"  onclick="return hs.expand(this, {captionId: 'caption-for-P1370'})"> 
                <img src="/wp-content/uploads/2009/11/Web-Engine-300x219.png" alt="Web Engine: структура" border="0" id="P1370" title="Web Engine: структура" align="right" style="padding:0px" /></a> 
				

Итак, <em>движок-цмс</em> будем называть <strong>Web Engine</strong>, пока в голову не придет что-то по оригинальнее.</p>
<p>Главные цели которые будем ставить при проектировании движка:</p>
<ul>
<li><strong>скорость</strong> и простота разработки (при его помощи)</li>
<li>минимальный но легко расширяемый функционал</li>
<li>скорость работы</li>
</ul>
<p>Из этого всего следует, что будем использовать <strong>ООП</strong> и схему <strong><a href="http://ru.wikipedia.org/wiki/MVC">MVC</a></strong>.</p>
<blockquote><p><strong><a href="http://ru.wikipedia.org/wiki/MVC"><u>Model-view-controller</u></a></strong> (<strong>MVC</strong>, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты.
</p></blockquote>
<p>MVC схема нам поможет достичь первую и вторую цель, а именно: продуманная структура позволит легко изменять дизайн, вносить изменения в функционал, легко разбираться в коде новым разработчикам.    </p>
<p><span id="more-137"></span><br />
Будет использовано объектно-ориентированное программирование с описанной ниже структурой, которая может, и скорее всего будет меняться во время разработки.</p>
<p>Также, будем использовать <a href="http://en.wikipedia.org/wiki/Rewrite_engine">mod_rewrite</a> модуль Apache, для получения <em>красивых</em> url адресов. Он будет включен в файле .htaccess следующим образом:</p>
<pre class="brush: plain">
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</pre>
<p>В index.php, на который будут направляться все нужные нам запросы, будет создан экземпляр некого класса <strong>Engine</strong> внутри которого будут статические методы, которые будут возвращать синглтон вспомогательных классов (Config, Router, Users..).</p>
<p><img src="/wp-content/uploads/2009/11/Web-Engine.png" style="padding:0;" alt="Структура Web Engine"  align="center" /></p>
<p>Класс <em>UniversalStructureClass </em>(или, что то похожее) будет уметь работать с некими структурами описанными в конфигурации системы. Он получает имя структуры, ее схему и позволяет работать с данными этой структуры (get, set, выборки и другие операции). Предполагается, что некий рефлектор с помощью <em>Relations</em> будет, при необходимости, подгружать или модифицировать дополнительные данные для текущей страницы с помощью этого универсального класса.</p>
<p>После тестирования всего этого <em>добра</em> на скорость, скорее всего добавим возможность кеширования:  <a href="http://ru.wikipedia.org/wiki/Memcached">Memcached</a> и файловый. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.engoyan.com/137/web-engine-%d1%81%d1%82%d1%80%d1%83%d0%ba%d1%82%d1%83%d1%80%d0%b0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>target</title>
		<link>http://www.engoyan.com/1/hello-world.html</link>
		<comments>http://www.engoyan.com/1/hello-world.html#comments</comments>
		<pubDate>Sat, 07 Nov 2009 20:57:42 +0000</pubDate>
		<dc:creator>vadim engoyan</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[общие]]></category>
		<category><![CDATA[frame]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[web engine]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false"> http://www.engoyan.com/?p=1</guid>
		<description><![CDATA[Для начала нужно прочитать станицу  ReadMe.
Не по воле своей, а по причине вредных привычек некоторых моих клиентов,  мне время от времени приходится иметь дело с блоговым движком Wordpress. Первый раз это было лет 5 назад, когда даже после perl-овских скриптов он мне показался просто свалкой кода, хотя уже на тот момент он был довольно популярным.
Когда [...]]]></description>
			<content:encoded><![CDATA[<p>Для начала нужно прочитать станицу  <span style="text-decoration: underline;"><strong><a href="/readme" target="_blank">ReadMe</a></strong></span>.</p>
<p>Не по воле своей, а по причине вредных привычек некоторых моих клиентов,  мне время от времени приходится иметь дело с блоговым движком Wordpress. Первый раз это было лет 5 назад, когда даже после perl-овских скриптов он мне показался просто свалкой кода, хотя уже на тот момент он был довольно популярным.</p>
<p>Когда последний раз я увидел его симпотный дизайн, я подумал что наконец ребята взялись и за его внутренности тоже, но с просмотра первого попавшего файла я понял, что ребята все это время попивали сок со льдом и смотрели как трудятся дизайнеры.</p>
<p>Забегая вперед скажу, что этот сайтик бежит на том же херово написанном Wordpress-е, что и раньше.</p>
<p>У меня конечно есть свой движок, который на отлично справился бы с задачей и функционалом данного сайта, но, есть одно но.. <span id="more-1"></span>Уже пару месяцем у меня в голове крутится мысля о написании новой версии основного движка, который я использую в большинстве проектов. Времени как всегда не хватает..</p>
<p>Я решил таким [не] хитрым способом мотивировать себя на написание нового framework-а, и сразу переноса данного сайта на него. По задумке у меня на долго не хватить терпения такого позора и последуют решительные действия в виде бессонных ночей, прозрения и еще пары бессонных ночей.</p>
<p>Есть идея вести лог о ходе и методах разработки, но учитывая безразличие с которым я отношусь к результатом и целям данного (описания хода разработки) процесса, думаю это идея наивна, как вера в 18 летную девственницу.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.engoyan.com/1/hello-world.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

