<?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>Kubánek.org &#187; Doctrine</title>
	<atom:link href="http://kubanek.org/blog/stitky/doctrine/feed/" rel="self" type="application/rss+xml" />
	<link>http://kubanek.org</link>
	<description>Blog o programování, volejbale a zážitcích ze života</description>
	<lastBuildDate>Mon, 10 May 2010 20:50:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>S objekty do světa</title>
		<link>http://kubanek.org/blog/s-objekty-do-sveta/</link>
		<comments>http://kubanek.org/blog/s-objekty-do-sveta/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 19:39:18 +0000</pubDate>
		<dc:creator>Lukáš Kubánek</dc:creator>
				<category><![CDATA[Informační technologie]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Enterprise Architect]]></category>
		<category><![CDATA[Nette Framework]]></category>
		<category><![CDATA[Objektově.cz]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[USDP]]></category>
		<category><![CDATA[WebExpo]]></category>

		<guid isPermaLink="false">http://localhost/kubanek.org/?p=123</guid>
		<description><![CDATA[Musím se přiznat, že jsem na prvním ročníku konference WebExpo postrádal přednášku o pravém objektovém programování webové aplikace. Smutnil jsem, že se žádná významná osoba touto problematikou nezajímala. Postupem času jsem si začal uvědomovat zatemnění především začínajících vývojářů při neúplném pochopení architektury MVC a především zanedbávání modelu, který byl často nahrazován databázovými dotazy přímo v [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Musím se přiznat, že jsem na prvním ročníku konference WebExpo postrádal přednášku o pravém objektovém programování webové aplikace. Smutnil jsem, že se žádná významná osoba touto problematikou nezajímala. Postupem času jsem si začal uvědomovat zatemnění především začínajících vývojářů při neúplném pochopení architektury MVC a především zanedbávání modelu, který byl často nahrazován databázovými dotazy přímo v controllerech. Pořekadla jako <em><em>„</em></em><em>Model je funkční základ aplikace.<em>“</em></em> nebo <em><em>„</em><em>N</em></em><em>a model lze napasovat několik různých UI<em>.“</em></em> se řadili pouze mezi teoretické poučky.</p>
<p style="text-align: justify;">Podobný problém zaznamenal i Tomáš Jukin a tak jsme se rozhodli vyrazit s objekty mezi lidi.  Na letošním WebExpu si v rámci našeho workshopu <a href="http://webexpo.cz/workshop/vyvoj-objektovych-webovych-aplikaci-v-php-metodikou-usdp-pomoci-uml/">Vývoj objektových webových aplikací v PHP metodikou USDP pomocí UML</a> povíme, že vývoj webových aplikací na základě bezhlavého psaní kódu už dnes neletí. Vysvětlíme si, jak efektivně modelovat webové aplikace pomocí objektové metodiky Unified Software Development Process a jako jednotný dorozumívací jazyk v rámci vývojového týmu (popř. přímo s klienty) používat UML. Nad obyčejný podřadný kód posadíme abstraktní rovinu, která nám pomůže udělat si obrázek o systému mnohem rychleji než marné orientování v kódu. Značnou výhodou hotové aplikace bude její velmi dobrá upravitelnost a rozšiřitelnost.</p>
<p style="text-align: justify;">Náš 3,5 hodinový workshop se koná v sobotu 17.10.2009 časně zrána. Workshop bude rozdělen do dvou částí. Nejprve si povíme něco málo nezábavného o teorii modelování informačních systémů, metodice Unified Software Development Process a notačním jazyku UML. V druhé části vás provedeme řízením reálného projektu na základě metodiky USDP. Budeme si hrát na vývojový tým a společnými silami vyvineme použitelnou objektovou webovou aplikaci. Účastníci si v rámci workshopu vyzkouší CASE nástroj Enterprise Architect, získají teoretické základy metodiky USDP a jazyka UML a pochopí jak správně nakládat s modelem z architektury MVC na reálném příkladu založeném na technologiích <em>Nette Framework </em>a <em>Doctrine</em>. Pište správné objektové webové aplikace a bude se vám lépe usínat!</p>
]]></content:encoded>
			<wfw:commentRss>http://kubanek.org/blog/s-objekty-do-sveta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Asociace typu M:N</title>
		<link>http://kubanek.org/blog/asociace-typu-mn/</link>
		<comments>http://kubanek.org/blog/asociace-typu-mn/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 19:09:57 +0000</pubDate>
		<dc:creator>Lukáš Kubánek</dc:creator>
				<category><![CDATA[Informační technologie]]></category>
		<category><![CDATA[databáze]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://localhost/kubanek.org/?p=37</guid>
		<description><![CDATA[Rozhodl jsem se publikovat první technicky založený článek. Mapování objektů do relační databáze je pro dnešní objektové jazyky občas oříškem. Největší neplechu páchá asociace typu M:N. Ta není dnešními objektovými jazyky přímo podporována. V tomto článku přiblížím, jak úspěšně vysvětlit objektovým jazykům, že hvězdičky můžou svítit na obou stranách.
Cože to vlastně ta asociace typu M:N [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Rozhodl jsem se publikovat první technicky založený článek. Mapování objektů do relační databáze je pro dnešní objektové jazyky občas oříškem. Největší neplechu páchá asociace typu M:N. Ta není dnešními objektovými jazyky přímo podporována. V tomto článku přiblížím, jak úspěšně vysvětlit objektovým jazykům, že hvězdičky můžou <em>svítit</em> na obou stranách.</p>
<p style="text-align: justify;">Cože to vlastně ta asociace typu M:N je? Každý se s ní už určitě setkal. Na diagramu 1 je zobrazen jednoduchý příklad. Učitel může vyučovat několik žáků z různých tříd a zároveň každý žák může být vyučován několika různými učiteli. Dokážu si představit, že obě analytické třídy budou nahrazeny návrhovými třídami a že hodnoty atributů budou uloženy ve dvou tabulkách relační databáze. Ve fázi analýzy je na tento diagram radost pohledět, jenže ve fázi návrhu už tak růžově nevypadá.</p>
<div id="attachment_64" class="wp-caption aligncenter" style="width: 328px"><a href="http://kubanek.org/download/2009/02/d1.png" rel="lightbox[37]"><img class="size-full wp-image-64 " title="Diagram 1: Asociace typu M:N ve fázi analýzy" src="http://kubanek.org/download/2009/02/d1.png" alt="Diagram 1: Asociace typu M:N ve fázi analýzy" width="318" height="101" /></a><p class="wp-caption-text">Diagram 1: Asociace typu M:N ve fázi analýzy</p></div>
<p style="text-align: justify;">Podívejme se nyní do pozdější fáze analýzy, co se s naší školskou delegací stalo. Na diagramu 2 jsou vidět doplněné atributy a operace. Jen objasním, že operace <em>zjistiSeznamZaku()</em> vrací asociativní pole všech objektů typu <em>Žák</em>, které daný objekt typu <em>Učitel</em> vyučuje. Na opačné straně vrací operace <em>zjistiSeznamUcitelu()</em> asociativní pole všech objektů typu <em>Učitel</em>, které vyučují daný objekt typu <em>Žák</em>. Některé jazyky místo pole používají kolekce objektů, tím už se ale náš článek nezabývá. Ostatní atributy a operace popisovat nemusím, protože jsem zvolil opravdu jednoduchý příklad.</p>
<div id="attachment_66" class="wp-caption aligncenter" style="width: 480px"><a href="http://kubanek.org/download/2009/02/d2.png" rel="lightbox[37]"><img class="size-full wp-image-66 " title="Diagram 2: Asociace typu M:N s atributy a operacemi tříd" src="http://kubanek.org/download/2009/02/d2.png" alt="Diagram 2: Asociace typu M:N s atributy a operacemi tříd" width="470" height="174" /></a><p class="wp-caption-text">Diagram 2: Asociace typu M:N s atributy a operacemi tříd</p></div>
<p style="text-align: justify;">Přenesme se nyní mezi řádky nějakého skriptu, který vypisuje ke každému učiteli všechny vyučované žáky. Pokud by se databáze sestávala pouze ze dvou tabulek, jako je vidět v diagramu 3, budou nám stále chybět reference mezi jednotlivými objekty typů <em>Učitel</em> a <em>Žák</em> a náš skript, ať už bude sepsán jakkoli, náš cílený problém nevyřeší a nedokáže ke každému učiteli vypsat všechny jím vyučované žáky. <em>Příklad tabulek je v MySQL.</em></p>
<div id="attachment_72" class="wp-caption aligncenter" style="width: 393px"><a href="http://kubanek.org/download/2009/02/d3.png" rel="lightbox[37]"><img class="size-full wp-image-72" title="Diagram 3: Pohled na zamýšlené databázové tabulky" src="http://kubanek.org/download/2009/02/d3.png" alt="Diagram 3: Pohled na zamýšlené databázové tabulky" width="383" height="159" /></a><p class="wp-caption-text">Diagram 3: Pohled na zamýšlené databázové tabulky</p></div>
<p style="text-align: justify;">Takže nám něco chybí. Pojďme se zbavit té ohyzdné asociace typu M:N a rozbijme ji na dvě asociace typu 1:M. Vložme mezi asociaci typu M:N jednu třídu navíc, kterou můžeme pojmenovat speciálním názvem například <em>Výuka</em> nebo jednoduše spojením názvů obou spojovaných tříd, tzn. <em>UčitelŽák</em>. Tato geniální třída bude sloužit jako pojítko mezi našimi třídami. Každá instance bude ukazovat právě na jeden objekt typu <em>Učitel</em> a právě na jeden objekt typu <em>Žák</em>. Jako celek jsem určil třídu <em>Učitel</em> z toho důvodu, že budeme vypisovat žáky, které učitel vyučuje. Objekty typu <em>Učitel</em> jsou tedy odpovědné za životní cyklusy objektů typu <em>Výuka</em>. Stejně tak bychom mohli třídu <em>Výuka</em> přiřadit třídě <em>Žák</em>. Výsledek je zobrazen na diagramu 4.</p>
<div id="attachment_73" class="wp-caption aligncenter" style="width: 583px"><a href="http://kubanek.org/download/2009/02/d4.png" rel="lightbox[37]"><img class="size-full wp-image-73" title="Diagram 4: Využití propojující třídy Výuka" src="http://kubanek.org/download/2009/02/d4.png" alt="Diagram 4: Využití propojující třídy Výuka" width="573" height="184" /></a><p class="wp-caption-text">Diagram 4: Využití propojující třídy Výuka</p></div>
<p>Na diagramu 5 jsou zobrazeny tabulky relační databáze, které jsou nyní propojené přes cicí klíče (foreign keys) tabulky <em>Výuka</em>.</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 633px"><a href="http://kubanek.org/download/2009/02/d5_new.png" rel="lightbox[37]"><img class="size-full wp-image-74" title="Diagram 5: Pohled na konečné tabulky databáze" src="http://kubanek.org/download/2009/02/d5_new.png" alt="Diagram 5: Pohled na konečné tabulky databáze" width="623" height="385" /></a><p class="wp-caption-text">Diagram 5: Pohled na konečné tabulky databáze</p></div>
<p style="text-align: center;"><em>(pozn. děkuji maartymu za upozornění komentářem, že EA umí modelovat databáze&#8230;)</em></p>
<p style="text-align: justify;">Metoda <em>zjistiSeznamZaku()</em> nyní vybere z tabulky <em>Výuka</em> veškeré řádky, u kterých je idUcitele rovno id hledaného učitele. Metoda vytvoří pole objektů typu <em>Žák</em>, jejichž id se nachází v nalezených řádcích v tabulce <em>Výuka</em>. Toto pole nakonec vrátí. Již zmiňovaný skript nyní může pole projít a vypsat jméno a příjmení.</p>
<p style="text-align: justify;">Tak jsme si osvětlili, jak se manuálně vypořádat s asociací typu M:N. Nad relačními databázemi dnes ale existují ORM nástroje, které se s asociací typu M:N vypořádají automaticky a programátor ani nepocítí, že se v databázi nachází ještě nějaká propojovací tabulka. Takový ORM nástroj pro PHP je například <a href="http://doctrine-project.org/">Doctrine</a>, který je inspirován <a href="http://www.hibernate.org/">Hibernate</a> pro Javu.</p>
]]></content:encoded>
			<wfw:commentRss>http://kubanek.org/blog/asociace-typu-mn/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
