<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/1.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: хапвам, значи съм!</title>
	<link>http://underlog.org/2003/12/30/53</link>
	<description></description>
	<pubDate>Mon, 08 Sep 2008 16:07:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5</generator>

	<item>
		<title>by: Da Spamer</title>
		<link>http://underlog.org/2003/12/30/53#comment-63</link>
		<pubDate>Tue, 30 Dec 2003 17:57:47 +0800</pubDate>
		<guid>http://underlog.org/2003/12/30/53#comment-63</guid>
					<description>Хехе, добър начин за комбинация на идеи ;) Блогът го има от доста време и никога не се бях замислял как работи (то и да мисля, едва ли щях да позная).Това ми напомня за времето, когато пишех собствен клас за темплейти ;) докато не пробвах Smarty... без коментар какво се случи по-нататък ;)

Наскоро ми хрумна блестящата идея да направя скелет за всичките ми бъдещи проекти.Какво представлява този скелет? Значи, изграден е на модули, като има и ядро.Ядрото зарежда всички необходими модили за работата на &quot;приложението&quot; (скрипта), като модули за базата данни, member login, session, output, template и мн. други, които са все вътрешни модули.След това, зарежда външните модули (тоест, самият сайт вече), като определящото кой/кои модули ще се заредят е id-то на страницата.Всеки модул има достъп до вътр. модули и всичко е толкова лесно... Ето ви един пример:

Index.mod.php

class Index extends BaseModule {
	
	function Index()
	{
		$this-&gt;BaseModule();
	}
	
	
	function act_Default()
	{
		global $app;
		
		if (!$app-&gt;login-&gt;logged()) {
			$app-&gt;tpl-&gt;display('login.htm');
		} else {
			$sql = &quot;....&quot;;
			$app-&gt;db-&gt;query($sql);

			if ($app-&gt;db-&gt;num_rows() &lt; 1) {
				$app-&gt;error($app-&gt;lang-&gt;get_text('invalid_login'));
			}

			$user = $app-&gt;db-&gt;fetch_array();
		}
	}
	
	function act_Login()
	{
		global $app;

		if (($name = $app-&gt;input('name')) != NULL &amp;&amp; ($pass = $app-&gt;input('password')) != NULL) {
			if (!$app-&gt;login-&gt;member_login($user, $pass)) {....} else {...}
		}
	}
}

И тъй нататък ;)</description>
		<content:encoded><![CDATA[	<p>Хехе, добър начин за комбинация на идеи <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Блогът го има от доста време и никога не се бях замислял как работи (то и да мисля, едва ли щях да позная).Това ми напомня за времето, когато пишех собствен клас за темплейти <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  докато не пробвах Smarty&#8230; без коментар какво се случи по-нататък <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
	<p>Наскоро ми хрумна блестящата идея да направя скелет за всичките ми бъдещи проекти.Какво представлява този скелет? Значи, изграден е на модули, като има и ядро.Ядрото зарежда всички необходими модили за работата на &#8220;приложението&#8221; (скрипта), като модули за базата данни, member login, session, output, template и мн. други, които са все вътрешни модули.След това, зарежда външните модули (тоест, самият сайт вече), като определящото кой/кои модули ще се заредят е id-то на страницата.Всеки модул има достъп до вътр. модули и всичко е толкова лесно&#8230; Ето ви един пример:</p>
	<p>Index.mod.php</p>
	<p>class Index extends BaseModule {</p>
	<p>	function Index()<br />
	{<br />
		$this->BaseModule();<br />
	}</p>
	<p>	function act_Default()<br />
	{<br />
		global $app;</p>
	<p>		if (!$app->login->logged()) {<br />
			$app->tpl->display(&#8217;login.htm&#8217;);<br />
		} else {<br />
			$sql = &#8220;&#8230;.&#8221;;<br />
			$app->db->query($sql);</p>
	<p>			if ($app->db->num_rows() < 1) {<br />
				$app->error($app->lang->get_text(&#8217;invalid_login&#8217;));<br />
			}</p>
	<p>			$user = $app->db->fetch_array();<br />
		}<br />
	}</p>
	<p>	function act_Login()<br />
	{<br />
		global $app;</p>
	<p>		if (($name = $app->input(&#8217;name&#8217;)) != NULL &#038;&#038; ($pass = $app->input(&#8217;password&#8217;)) != NULL) {<br />
			if (!$app->login->member_login($user, $pass)) {&#8230;.} else {&#8230;}<br />
		}<br />
	}<br />
}</p>
	<p>И тъй нататък <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Петьо</title>
		<link>http://underlog.org/2003/12/30/53#comment-64</link>
		<pubDate>Tue, 30 Dec 2003 19:04:58 +0800</pubDate>
		<guid>http://underlog.org/2003/12/30/53#comment-64</guid>
					<description>Уххх, много има да се говори по този въпрос, радвам се че има хора, интересуващи се от подобни неща. 

За мен успешното разделение е следното - Data Access Layer (връзка и манипулация на data storage) - за което препоръчвам ADODB - много прекрасно. Отделно ако ти трябват различни технологично ориентирани модули (IMAP връзка, комуникация с сървъри други, CC процесори, тем подобни...), те също се обособяват като класове. Да не забравим централизирана система за прихващане и обработка на грешки. 

След това идва логиката на приложението, &quot;бизнес обектите&quot;, извличаме техните свойства от схемите, начертани предварително, които илюстрират които сме начертали процеса на работата на приложението... те вътрешно в себе си употребяват data access и каквото там се наложи.

Накрая идва UI (User Interface), което вече се грижи изцяло за поемането на взаимодействието с потребителя. Добре е да се ползва template model, макар че Smarty ми е супер смотан, като го сравня с asp.net (еххх...) но определено е нещо. 

Има много за говорене, но определно php е труден за имплементиране на такъв тип архитектура... Лека полека ще стигна и дотам. Но най важното е да не се впускаш в частни случаи, за това си има наследяване за конкретен проект :) ... </description>
		<content:encoded><![CDATA[	<p>Уххх, много има да се говори по този въпрос, радвам се че има хора, интересуващи се от подобни неща. </p>
	<p>За мен успешното разделение е следното - Data Access Layer (връзка и манипулация на data storage) - за което препоръчвам ADODB - много прекрасно. Отделно ако ти трябват различни технологично ориентирани модули (IMAP връзка, комуникация с сървъри други, CC процесори, тем подобни&#8230;), те също се обособяват като класове. Да не забравим централизирана система за прихващане и обработка на грешки. </p>
	<p>След това идва логиката на приложението, &#8220;бизнес обектите&#8221;, извличаме техните свойства от схемите, начертани предварително, които илюстрират които сме начертали процеса на работата на приложението&#8230; те вътрешно в себе си употребяват data access и каквото там се наложи.</p>
	<p>Накрая идва UI (User Interface), което вече се грижи изцяло за поемането на взаимодействието с потребителя. Добре е да се ползва template model, макар че Smarty ми е супер смотан, като го сравня с asp.net (еххх&#8230;) но определено е нещо. </p>
	<p>Има много за говорене, но определно php е труден за имплементиране на такъв тип архитектура&#8230; Лека полека ще стигна и дотам. Но най важното е да не се впускаш в частни случаи, за това си има наследяване за конкретен проект <img src='http://underlog.org/wp-images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8230;
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Da Spamer</title>
		<link>http://underlog.org/2003/12/30/53#comment-65</link>
		<pubDate>Wed, 31 Dec 2003 00:00:03 +0800</pubDate>
		<guid>http://underlog.org/2003/12/30/53#comment-65</guid>
					<description>Винаги най-голямият ми проблем е бил обработката на грешки.Така и не можах да напиша свестен механизъм, който да може да се справя отлично с този проблем.Но, за сметка на това имам малко идеи, но те са трудни за имплементация.Мисля си за множествено наследяване (BaseObject -&gt; Object -&gt; ErrorHandle -&gt; ErrorReport -&gt; Module), но става адски сложно ;)

Друг проблем също е и самото разделяне на вътрешни и външни &quot;модули&quot; - малко объркващо, но няма как...

Определено изграждането на един общ &quot;скелет&quot; е добра идея, спестява доста труд и е лесно за ъпдейтване (просто се заменят файловете).

Мисля си, какво ще стане, ако примерно този &quot;скелет&quot; се хоства на дадено място и е базов за всички следващи проекти? Възможно ли е, как ти се струва тази идея? При една добра капсулация на данните няма да се налага ъпдейт на сайтовете, които ползват този &quot;скелет&quot; и ако има промяна, примерно в бързодействието, това ще се отразява навсякъде.

Стига толкова от мен, замечтах се вече, личи ми ;)) Поздрави и ВЕСЕЛИ ПРАЗНИЦИ НА ВСИЧКИ :) Пожелавам ви никога повече спам ;)</description>
		<content:encoded><![CDATA[	<p>Винаги най-голямият ми проблем е бил обработката на грешки.Така и не можах да напиша свестен механизъм, който да може да се справя отлично с този проблем.Но, за сметка на това имам малко идеи, но те са трудни за имплементация.Мисля си за множествено наследяване (BaseObject -> Object -> ErrorHandle -> ErrorReport -> Module), но става адски сложно <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
	<p>Друг проблем също е и самото разделяне на вътрешни и външни &#8220;модули&#8221; - малко объркващо, но няма как&#8230;</p>
	<p>Определено изграждането на един общ &#8220;скелет&#8221; е добра идея, спестява доста труд и е лесно за ъпдейтване (просто се заменят файловете).</p>
	<p>Мисля си, какво ще стане, ако примерно този &#8220;скелет&#8221; се хоства на дадено място и е базов за всички следващи проекти? Възможно ли е, как ти се струва тази идея? При една добра капсулация на данните няма да се налага ъпдейт на сайтовете, които ползват този &#8220;скелет&#8221; и ако има промяна, примерно в бързодействието, това ще се отразява навсякъде.</p>
	<p>Стига толкова от мен, замечтах се вече, личи ми <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) Поздрави и ВЕСЕЛИ ПРАЗНИЦИ НА ВСИЧКИ <img src='http://underlog.org/wp-images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Пожелавам ви никога повече спам <img src='http://underlog.org/wp-images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Петьо</title>
		<link>http://underlog.org/2003/12/30/53#comment-66</link>
		<pubDate>Wed, 31 Dec 2003 13:26:56 +0800</pubDate>
		<guid>http://underlog.org/2003/12/30/53#comment-66</guid>
					<description>Мтъй... значи едно по едно. Обработката на грешки за мен трябва да предоставя следната функционалност: 

- Поддръжка на debug и release състояние (в едната е ясно че бълва грешките директно в страницата)
- Бърз и лесен механизъм за уведомяване за инциденти (например най неангажиращото е изпращане по мейл, обаче ако сте 30 човека е добре като идея да репортва в някаква централизирана bug tracking система)
- Възможност за отбелязване на &quot;проблеми&quot; и &quot;потенциални заплахи&quot; при оперирането на системата (363 коментара за 1 минута например не е бъг, но трябва да бъде отразен). 

Microsoft *заляга да не го пребият с камъни* са разработили exception management app block за .net - 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp

според мен подходът им (макар и доста усложнен) е правилният. Архитектурата на този &quot;блок&quot; може да се опрости и изгради на php. Да не забравяме, че оттам нататък всички останали парчета от кода трябва да се съобразяват с наличието на този блок и да не обработват грешките &quot;на парче&quot;, също и да  &quot;хвърлят&quot; грешки ако се наложи. (PHP справка - trigger_error). Предвид излизането на php 5 (където вече има try catch finally, ако не се лъжа разбира се) може да се очаква error handling историята да стане малко по-културна.

За общия скелет - да, идеята е добра. Предимно ако разполагаш със собствен сървър. Дори е заложено в php енджина - обща include директория, където сложените неща са достъпни навсякъде. Под .net си имаш GAC - global assembly cache, пак със подобна идея. 

И за финал да подчертая дебело, че изграждането на такъв скелет никак, ама никак не е лесна работа. Оценявам го като &quot;висш пилотаж&quot; предвид леките проблеми при употребата на ОО PHP... </description>
		<content:encoded><![CDATA[	<p>Мтъй&#8230; значи едно по едно. Обработката на грешки за мен трябва да предоставя следната функционалност: </p>
	<p>- Поддръжка на debug и release състояние (в едната е ясно че бълва грешките директно в страницата)<br />
- Бърз и лесен механизъм за уведомяване за инциденти (например най неангажиращото е изпращане по мейл, обаче ако сте 30 човека е добре като идея да репортва в някаква централизирана bug tracking система)<br />
- Възможност за отбелязване на &#8220;проблеми&#8221; и &#8220;потенциални заплахи&#8221; при оперирането на системата (363 коментара за 1 минута например не е бъг, но трябва да бъде отразен). </p>
	<p>Microsoft *заляга да не го пребият с камъни* са разработили exception management app block за .net -<br />
<a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp' rel='nofollow'>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp</a></p>
	<p>според мен подходът им (макар и доста усложнен) е правилният. Архитектурата на този &#8220;блок&#8221; може да се опрости и изгради на php. Да не забравяме, че оттам нататък всички останали парчета от кода трябва да се съобразяват с наличието на този блок и да не обработват грешките &#8220;на парче&#8221;, също и да  &#8220;хвърлят&#8221; грешки ако се наложи. (PHP справка - trigger_error). Предвид излизането на php 5 (където вече има try catch finally, ако не се лъжа разбира се) може да се очаква error handling историята да стане малко по-културна.</p>
	<p>За общия скелет - да, идеята е добра. Предимно ако разполагаш със собствен сървър. Дори е заложено в php енджина - обща include директория, където сложените неща са достъпни навсякъде. Под .net си имаш GAC - global assembly cache, пак със подобна идея. </p>
	<p>И за финал да подчертая дебело, че изграждането на такъв скелет никак, ама никак не е лесна работа. Оценявам го като &#8220;висш пилотаж&#8221; предвид леките проблеми при употребата на ОО PHP&#8230;
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Петьо</title>
		<link>http://underlog.org/2003/12/30/53#comment-67</link>
		<pubDate>Wed, 31 Dec 2003 13:29:41 +0800</pubDate>
		<guid>http://underlog.org/2003/12/30/53#comment-67</guid>
					<description>Ето и един kick старт за обработка на грешки - 
http://underlog.org/full_story.php?NewsID=28

Не е кой знае какво, но за малки неща може да се употреби без всякакво замисляне :)</description>
		<content:encoded><![CDATA[	<p>Ето и един kick старт за обработка на грешки -<br />
<a href='http://underlog.org/full_story.php?NewsID=28' rel='nofollow'>http://underlog.org/full_story.php?NewsID=28</a></p>
	<p>Не е кой знае какво, но за малки неща може да се употреби без всякакво замисляне <img src='http://underlog.org/wp-images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
