<?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>xlab &#187; ea</title>
	<atom:link href="http://xlab.pl/tag/ea/feed/" rel="self" type="application/rss+xml" />
	<link>http://xlab.pl</link>
	<description>XSolve laboratory - dzielimy się tym co wiemy...</description>
	<lastBuildDate>Mon, 09 Jan 2012 15:29:06 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Enterprise Architect &#8211; transformacja diagramu klas na DDL</title>
		<link>http://xlab.pl/enterprise-architect-transformacja-diagramu-klas-na-ddl/</link>
		<comments>http://xlab.pl/enterprise-architect-transformacja-diagramu-klas-na-ddl/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 15:31:03 +0000</pubDate>
		<dc:creator>Marcin Dryka</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[architect]]></category>
		<category><![CDATA[ddl]]></category>
		<category><![CDATA[diagram]]></category>
		<category><![CDATA[ea]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[klas]]></category>
		<category><![CDATA[projektowanie]]></category>
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://www.xlab.pl/?p=74</guid>
		<description><![CDATA[Enterprise Architect firmy Sparx Systems, to potężne narzędzie do projektowania aplikacji. Możemy w nim wykonać projekt od początku do końca. Zaczynając od wymagań klienta, możemy przejść przez wygenerowanie odpowiedniej bazy danych, kończąc na eksportowaniu dokumentacji, która po wydrukowaniu może trafić w ręce klienta. Jednak tak ogromne narzędzie ma jedną sporą wadę &#8211; trzeba mu poświęcić [...]]]></description>
			<content:encoded><![CDATA[<p>Enterprise Architect firmy <a href="http://www.sparxsystems.com.au/">Sparx Systems</a>, to potężne narzędzie do projektowania aplikacji. Możemy w nim wykonać projekt od początku do końca. Zaczynając od wymagań klienta, możemy przejść przez wygenerowanie odpowiedniej bazy danych, kończąc na eksportowaniu dokumentacji, która po wydrukowaniu może trafić w ręce klienta.</p>
<p><span id="more-74"></span></p>
<p>Jednak tak ogromne narzędzie ma jedną sporą wadę &#8211; trzeba mu poświęcić mu trochę czasu zanim stanie się ono użyteczne. W pierwszej kolejności po narysowaniu poprawnego diagramu klas chciałem wygenerować diagram DDL. Co z tego wszystkiego wynikło opisuję poniżej.</p>
<p>Opis zawiera uniwersalny sposób generacji DDL, jednak znacząco jest ukierunkowany na zgodność z symfony (zgodność nazw atrybutów, klas modelu itp.)</p>
<ol>
<li>Utworzyłem nowy projekt:<br />
Klikając kolejno:<strong> File </strong>&gt; <strong>New project</strong> wpisując nazwę pod którą będę trzymać plik projektu (wszystkie informacje zawarte są w pojedynczym pliku) kontynuowałem przyciskiem <strong>Zapisz</strong>.</li>
<li>Moim oczom ukazało się okno w którym mogę wybrać rodzaj diagramu który automatycznie chciałbym dołączyć do projektu. Zaznaczam jedynie <em>Class</em>, bo o eksporcie tego diagramy jest ten artykuł.</li>
<p style="text-align: center;">
<a href="http://www.xlab.pl/wp-content/uploads/2009/03/selectmodel.png"><img class="alignnone size-medium wp-image-76" title="Select Model" src="http://www.xlab.pl/wp-content/uploads/2009/03/selectmodel-300x265.png" alt="" width="300" height="265" /></a></p>
<li>Po zatwierdzeniu modelu w przeglądarce projektu (<em>Project Browser</em>) ukazał się pakiet (<em>package</em>) o nazwie Class Model, a w nim przykładowy model klas. Usunąłem z niego zarówno folder Systems jak i Frameworks oraz zawartość diagramu. Teraz mogę przystąpić do właściwego projektowania diagramu klas. Metodą przeciągnij i upuść z okna narzędzi (<em>Tools</em>) przeciągnąłem interesujące nas elementy diagramu. Ja w przykładzie wykorzystałem taki diagram:</li>
<p style="text-align: center;"><a href="http://www.xlab.pl/wp-content/uploads/2009/03/diagramklas.png"><img class="alignnone size-medium wp-image-77" title="Diagram Klas" src="http://www.xlab.pl/wp-content/uploads/2009/03/diagramklas-300x133.png" alt="" width="300" height="133" /></a></p>
<li>Teraz pora na transformacje na DDL. W przeglądarce projektu klikając na pakiet prawym klawiszem myszy mam dostępną opcję transformacji aktualnego pakietu (<em>Transform Current Package</em>). Zaznaczając wszystkie dostępne elementy oraz transformację DDL (określając docelowe miejsce położenia) korzystam z przycisku &#8222;Do Transform&#8221;. Po kilu sekundach został utworzony pakiet DDL wraz z jego diagramem.</li>
<p style="text-align: center;"><a href="http://www.xlab.pl/wp-content/uploads/2009/03/ddl.png"><img class="alignnone size-medium wp-image-79" title="ddl" src="http://www.xlab.pl/wp-content/uploads/2009/03/ddl-300x121.png" alt="" width="300" height="121" /></a></p>
<li>W zasadzie w tym momencie mogłbym wygenerować z diagramu plik SQL gotowy do użycia w bazie danych, gdyby nie jedna niezgodność. Zauważmy, że utworzone klucze główne oraz obce są w formacie {nazwa}ID (kategoriaID, artykulID). Symfony posiada inną konwencję ({nazwa}_id). Aby poprawnie skonfigurować nazewnictwo skorzystałem z edycji szablonów transformacji.</li>
<li style="text-align: left;">Wybierając <strong>Setting </strong>&gt; <strong>Transformation Templates</strong> otworzyłem edytor szablonów</li>
<p style="text-align: center;"><a href="http://www.xlab.pl/wp-content/uploads/2009/03/transformationeditor.png"><img class="alignnone size-medium wp-image-80" title="Transformation Editor" src="http://www.xlab.pl/wp-content/uploads/2009/03/transformationeditor-300x153.png" alt="" width="300" height="153" /></a></p>
<li>Aby skonfigurować poprawnie nazwy identifikatorów tabel oraz nazwy kluczy obcych należy wyedytowałem dwa szablony: <em>Class </em>oraz <em>Connector</em>. Odnajdując linię:
<pre class="bash">name=%qt%%CONVERT_NAME(className, "Pascal Case","Camel Case")%ID%qt%</pre>
<p>zmieniłem ją na następującą:</p>
<pre class="bash">name=%qt%%CONVERT_NAME(className, "Pascal Case","Underscored")%_id%qt%</pre>
<p>Zostaje do wprowadzenia w szablonie<em> Connector </em>dziesięć analogicznych zmian.</li>
<li style="text-align: left;">Po wykonaniu wszystkich zmian, ponownie przegenerowałem diagram DDL (jak w punkcie 4). W wyniku czego otrzymałem diagram zgodny z konwencjami symfony (wcześniej należy usunąć poprzedni diagram DDL w celu wygenerowania nowych, poprawnych nazw kluczy obcych:</li>
<p style="text-align: center;"><a href="http://www.xlab.pl/wp-content/uploads/2009/03/ddl_final.png"><img class="alignnone size-medium wp-image-83" title="ddl_final" src="http://www.xlab.pl/wp-content/uploads/2009/03/ddl_final-300x126.png" alt="" width="300" height="126" /></a></p>
<li>Nareszcie to czego oczekiwałem od samego początku! Pozostaje skorzystać z <strong>Project </strong>&gt; <strong>Database Engineering </strong>&gt; <strong>Generate Package DDL</strong>, w którym zaznaczając <em>Generate Primary/Foreign Key Constrains</em> oraz określając plik wynikowy <em>File Generation</em> &gt; <em>Single File</em> generuje za pomocą <em>Generate </em>plik sql. W tym momencie mam gotowy skrypt SQL do wczytania do bazy danych.</li>
<li>Co jednak jeśli nie chcielibyśmy tych wszystkich kroków wykonywać na każdej stacji klienckiej z Enterprise Architectem lub po prostu podzielić się ze znajomym wykonaną pracą? Nic prostrzego. Korzystając z <strong>Tools</strong> &gt; <strong>Export Reference Data </strong>możemy zaznaczyć interesujący nas <em>DDL_Transform_Template</em> i wyeksportować go do pliku xml. Taki plik możemy wczytać w dowolnym momencie do każdej stacji klienckiej korzystając z <strong>Tools </strong>&gt;<strong> Import Reference Data</strong></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://xlab.pl/enterprise-architect-transformacja-diagramu-klas-na-ddl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

