<?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>adamczuk.net.pl &#187; design patern</title>
	<atom:link href="http://adamczuk.net.pl/tag/design-patern/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 14 Aug 2010 10:26:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ajax. Wzorce projektowe</title>
		<link>http://adamczuk.net.pl/2010/08/07/ajax-wzorce-projektowe/</link>
		<comments>http://adamczuk.net.pl/2010/08/07/ajax-wzorce-projektowe/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 19:29:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Książki]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=337</guid>
		<description><![CDATA[Recenzja książki o tematyce wzorców projektowych dla technologii AJAX.]]></description>
			<content:encoded><![CDATA[<p><a href="http://adamczuk.net.pl/wp-content/uploads/2010/08/ajax_design_paterns.jpg"><img src="http://adamczuk.net.pl/wp-content/uploads/2010/08/ajax_design_paterns.jpg" alt="" title="ajax_design_paterns" width="140" height="200" class="alignleft left size-full wp-image-359" /></a>Wydawnictwo <a href="http://oreilly.com/">O&#8217;Reilly</a> słynie z wielu książek technicznych, które sprzedały się na całym świecie w milionach sztuk. Wiele z nich zostało przetłumaczonych na inne języki, w tym polski. Najpopularniejszy wydawca książek informatycznych w Polsce, czyli <a href="http://helion.pl">Helion</a> posiada w swojej ofercie także tłumaczenia książek z wydawnictwa O&#8217;Reilly. Ajax to stara technologia, dlatego przez lata zostały dla niej wypracowane doskonałe rozwiązania. Najpowszechniejsze wzorce projektowe zostały opisane w tej właśnie książce.<span id="more-337"></span></p>
<p><em>Ajax. Wzorce projektowe</em> to książka dla projektantów aplikacji internetowych. Przykłady przedstawione przez autora to najczęściej stosowane rozwiązania. Po przeczytaniu tej książki projektowanie aplikacji z wykorzystaniem technologii Ajax stanie się o wiele łatwiejsze. Tworzenie dynamicznych interfejsów użytkownika, zdalne wywoływanie poleceń i transformacje XSLT zostały dokładnie opisane przez autora. Po przeczytaniu książki łatwiejsze stanie się manipulowanie elementami DOM oraz kwestie użyteczności i dostępności stron internetowych.</p>
<p>Książka opisuje początki technologii Ajax oraz podstawy projektowania aplikacji z jej wykorzystaniem. Sama technologia jest połączeniem XML oraz JavaScript. Asynchroniczne przesyłanie danych pomiędzy serwerem a przeglądarką to główna idea technologii. Autor skupia się również na usługach sieciowych oraz aspektach ponownego wykorzystania kodu i optymalizacji pod kątem wydajności. Książka przedstawia sposoby tworzenia użytecznych formularzy oraz efektów graficznych. Ostatnia grupa wzorców opisanych w książce stanowi techniki diagnozowania tworzonych aplikacji.</p>
<p class="info">OSTATECZNA OCENA: 4/5</p>
<ul>
<li><strong>Autorzy: Michael Mahemoff</strong></li>
<li>Tytuł oryginału: Ajax Design Patterns</li>
<li>Tłumaczenie: Tomasz Walczak</li>
<li>ISBN: 978-83-246-0761-7</li>
<li>Format: 168&#215;237, 672 stron</li>
<li>Data wydania: 02/2007 (<a href="http://helion.pl">Helion</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/08/07/ajax-wzorce-projektowe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Fabryka abstrakcyjna</title>
		<link>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/</link>
		<comments>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[factory]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=263</guid>
		<description><![CDATA[Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.
Fabryka abstrakcyjna
Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte [...]]]></description>
			<content:encoded><![CDATA[<p>Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.<span id="more-263"></span></p>
<h3>Fabryka abstrakcyjna</h3>
<p>Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte zostają również nazwy klas, co odizolowuje klienta od problemu określenia, do której klasy należy obiekt.</p>
<pre><code>&lt;?php
interface IUser {
	function getName();
}

class User implements IUser {
	public function __construct($id) { }

	public function getName() {
		return 'Jacek';
	}
}

class UserFactory {
	public static function create($id) {
		return new User($id);
	}
}
?&gt;</code></pre>
<p>Klasa <code>User</code> zaprezentowana powyżej implementuje interfejs <code>IUser</code>, który zawiera metodę <code>getName()</code>. Tworzenie nowego obiektu użytkownika odbywa się poprzez statyczną metodę <code>create()</code>. Szczegóły tworzenia użytkowników ukryte są w klasie <code>User</code> fabryki.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie.</p>
<pre><code>&lt;?php
$oUser = UserFactory::create(1);
echo($oUser->getName());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>Jacek</code></pre>
<p>Wzorzec projektowy fabryki abstrakcyjnej kładzie nacisk na tworzenie produktów z konkretnej rodziny. </p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Singleton</title>
		<link>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/</link>
		<comments>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:21:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=250</guid>
		<description><![CDATA[Wzorzec projektowy Singleton. Wyjaśnienie idei oraz implemntacja w PHP.]]></description>
			<content:encoded><![CDATA[<p>Wzorce projektowe to ogólne rozwiązania częstych informatycznych problemów. Programowanie obiektowe w PHP5 różni się nie tylko składnią, ale również pewnymi brakami w porównaniu z innymi językami, typu C++ czy Java. Pomimo tego wzorce projektowe idealnie sprawdzają się w aplikacjach internetowych.<span id="more-250"></span></p>
<p>Częsta sytuacja, z jaką spotykają się programiści to współdzielenie zasobów. Wszystkie zapytania do bazy danych wymagają połączenia. Taki uchwyt może być wykorzystany wielokrotnie przez różne zapytania przy tym samym żądaniu. Otwieranie i zamykanie połączeń jest najzwyczajniej, mało ekonomiczne.</p>
<h3>Singleton</h3>
<p>Istnieje proste rozwiązanie tego problemu. Singleton to wzorzec projektowy, który zwraca istniejącą instancję obiektu. Jeśli taka instancja nie istnieje wówczas jest tworzona. Idea rozwiązania jest bardzo prosta i idealnie pasuje do naszego problemu. Poniżej znajduje się kod klasy <code>DB</code>, która dziedziczy z klasy <code>Singleton</code> i tworzy takie połączenie do bazy.</p>
<p>Prawidłowa struktura klas, co zasugerował <a href="http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/comment-page-1/#comment-5526">Wasacz</a> w komentarzach, wymaga dziedziczenia klasy <code>DB</code> po ogólnej klasie wzorca <code>Singleton</code>. Niestety nie mam pomysłu zogranizowanie klasy wzorca poza pustymi metodami i jedną zmienną.</p>
<pre><code>&lt;?php
abstract class Singleton {
	protected static $_instance;

	protected function __construct() { }

	public static function instance() { }
}

class DB extends Singleton {
	private $_conn;

	private function __construct($conf) {
		$this->_conn = mysql_connect($conf['host'], $conf['user'], $conf['pass']) or die($this->error());
	}

	public static function instance($conf=null) {
		if (is_null(self::$_instance)) {
			self::$_instance = new DB($conf);
		}
		return self::$_instance;
	}
}
?&gt;</code></pre>
<p>Klasa <code>DB</code> zaprezentowana powyżej nie jest skomplikowana. Zawiera jednak tylko niezbędne metody, prezentujące działanie klasy. Niemożliwe jest stworzenie egzemplarza klasy <code>DB</code>, ponieważ konstruktor jest prywatny. Dostęp do obiektu możliwy jest poprzez publiczną, statyczną metodę <code>instance()</code>.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie. Próba pobrania obiektu klasy <code>DB</code> powinna zwrócić ten sam zasób.</p>
<pre><code>&lt;?php
print_r(DB::instance());
print_r(DB::instance());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>DB Object
(
    [_conn:private] => Resource id #11
)
DB Object
(
    [_conn:private] => Resource id #11
)</code></pre>
<p>Wzorzec projektowy Singleton stosuje się bez względu na stopień skomplikowania aplikacji. Rozwiązanie to jest wygodniejsze i elastyczniejsze niż przechowywanie uchwytu do bazy danych w zmiennej globalnej.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
