<?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>Axel Jung &#187; design pattern</title>
	<atom:link href="http://www.ajung.de/tag/design-pattern/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Tue, 22 Nov 2011 21:13:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>ASP.NET MVC  Die ersten Gehversuche</title>
		<link>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/</link>
		<comments>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 15:45:12 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[asp.mvc]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=134</guid>
		<description><![CDATA[ASP.NET ist eigentlich ganz gut geworden bis auf die Tatsache dass es nicht das MVC Design Pattern anwendet. Dieses Pattern ist aber mittlerweile einfach Standard und wenn man mal damit gearbeitet hat, dann möchte man es nicht mehr missen. Deshalb gibt es das ASP.NET MVC Projekt. Nach der Installation des ASP.NET MVC Preview 4 Release [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.asp.net/">ASP.NET</a> ist eigentlich ganz gut geworden bis auf die Tatsache dass es nicht das MVC Design Pattern anwendet. Dieses Pattern ist aber mittlerweile einfach Standard und wenn man mal damit gearbeitet hat, dann möchte man es nicht mehr missen. Deshalb gibt es das <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> Projekt.</p>
<p>Nach der Installation des <a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389">ASP.NET MVC Preview 4</a> Release musste ich noch die Code Templates für Visual Studio nachträglich installieren. Diese findet man <a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&amp;ReleaseId=13792">hier</a>.</p>
<p>Wenn man jetzt ein ASP.MVC Projekt anlegt bekommt man folgende Struktur im Projekt:</p>
<p><img class="alignnone size-full wp-image-136" title="aspmvc_1" src="http://www.ajung.de/wp-content/uploads/2008/08/aspmvc_1.jpg" alt="" width="99" height="132" /></p>
<p>Genau wie andere MVC Frameworks muss man hier auf die richtige Namensgebung der Klassen und Template Dateien achten.</p>
<p>Die Controller Klassen müssen immer mit <em><strong>Controller </strong></em>enden<strong> </strong>(Controller/TasksController.vb)<strong> </strong>und die View Templates müssen in dem Ordner liegen wie der Controller heißt und den Namen der Methode haben (/Views/Tasks/Create.aspx).<strong><br />
</strong></p>
<p>Gut gelöst ist das URL Mapping. Um eine Action aufzurufen, gibt man in der Url den Namen des Controllers an und dessen Methode.</p>
<p>Beispiel:</p>
<p><strong>/Tasks/Create/</strong></p>
<p>Diese Url ruft die Methode <strong>Create </strong>der Klasse <strong>TaskController </strong>auf.</p>
<p>Schön gelöst ist die Verwendung von Parametern in Controllern. Man kann in der Signatur einer Controller Methode angeben, welche Parameter angegeben werden können und auch dessen Typ festlegen.</p>
<pre><span style="color: #800000;">Function Complete(ByVal id As Integer) As ActionResult</span></pre>
<p>Die Übergabe der Daten an die View erfolgt genau so einfach indem man die Werte als Parameter dem View übergibt.</p>
<pre><span style="color: #800000;">Return View(tasks.ToList())</span></pre>
<p>Diese Werte kann man in der View aspx Seite dann aus dem Property ViewData auslesen.</p>
<h3>Fazit</h3>
<p>Es handelt sich hier um ein sehr einfach zu bedienendes Framework das sehr schlank daher kommt. Die Einarbeitung geht schnell. In Verbindung mit Linq kann man damit sehr schnell übersichtliche Applikationen schreiben. Das Framework kommt völlig ohne die ASP Tags aus. Das macht es auch für unerfahrene ASP Entwickler einfach.</p>
<p>Sehr gute Screencasts findet man hier: <a href="http://www.asp.net/learn/mvc-videos/">http://www.asp.net/learn/mvc-videos/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/26/aspnet-mvc-die-ersten-gehversuche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Pattern: Observer/Events mit PEAR</title>
		<link>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/</link>
		<comments>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 15:29:30 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=47</guid>
		<description><![CDATA[Das Events Design Pattern ist ein sehr nützliches Pattern wenn man eine Anwendung hat in der sehr viel fachliche Logik auftritt und es ständig neue Anforderungen an bestehenden Prozessen gibt. Beispielsweise kann es sein das nach einen Login verschiedene Dinge geprüft werden müssen. Zusätzlich sollen vielleicht noch Aktionen geloggt werden. Wenn man jedesmal den Code [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-49" style="border: 1px solid black;" title="pear-package-event_dispatcher_1218811672121" src="http://www.ajung.de/wp-content/uploads/2008/08/pear-package-event_dispatcher_1218811672121.png" alt="" width="358" height="222" />Das Events  Design Pattern ist ein sehr nützliches Pattern wenn man eine Anwendung hat in der sehr viel fachliche Logik auftritt und es ständig neue Anforderungen an bestehenden Prozessen gibt.</p>
<p>Beispielsweise kann es sein das nach einen Login verschiedene Dinge geprüft werden müssen. Zusätzlich sollen vielleicht noch Aktionen geloggt werden.</p>
<p>Wenn man jedesmal den Code für den Login erweitern würde, dann hätte man innerhalb kürzester Zeit eine riesige Klasse mit schwer wartbaren Code.</p>
<p>Bei dem Observer Pattern gibt eine Anwendung nur bekannt das ein bestimmtes Ereignis (Event) stattgefunden hat. Andere Programmteile können sich von außen an den EventDispatcher anmelden und werden dann von diesen benachrichtigt wenn das Ereignis eintritt.</p>
<p>In der PHP Bibliothek <a href="http://pear.php.net/">PEAR</a> gibt es dieses Pattern schon fertig programmiert: <a href="http://pear.php.net/package/Event_Dispatcher">Event_Dispatcher.</a></p>
<h4>1. Handler erstellen</h4>
<p>Als Erstes benötigt man einen Handler der das Ereignis verarbeitet.</p>
<p>class Handler{<br />
/**<br />
* @param    Event_Notification<br />
*/<br />
public function getOnlogin(Event_Notification $oEvent_Notification){<br />
$oValueObjects_User = $oEvent_Notification-&gt;getNotificationObject();<br />
$aInfos = $oEvent_Notification-&gt;getNotificationInfo();<br />
// mach irgendetwas<br />
}<br />
}</p>
<h4>2. Handler registrieren</h4>
<p>Jetzt muss der Handler beim Event Dispatcher registriert werden.</p>
<pre>require_once 'Event/Dispatcher.php';
$oEvent_Dispatcher = Event_Dispatcher::getInstance();
$oEvent_Dispatcher-&gt;addObserver(array(new Handler(),'onLogin'),'onLogin');</pre>
<p>Der erste Parameter ist ein PHP Callback. Als dritten Parameter kann man von eingrenzen von welche Objekten dieser Event geworfen werden darf.</p>
<h4>3. Ereignis auslösen</h4>
<p>Jetzt muss das Ereignis noch ausgelöst werden.</p>
<pre>require_once 'Event/Dispatcher.php';
Event_Dispatcher::getInstance()-&gt;post($this,'onLogin',$aInfo);</pre>
<p>Im dritten Parameter kann man noch Informationen in Form eines Array übergeben.</p>
<h3>Nutzen</h3>
<h4>Veränderung vermeiden</h4>
<p>Der Nutzen in dem Pattern liegt darin das man die Anwendung nicht mehr nachträglich anpassen muss um Erweiterungen einzubauen.</p>
<h4>Verantwortlichkeiten sauber trennen</h4>
<p>Die Verantworltichkeit der Kompontenten bleibt frei von Nebensächlichkeiten. Zum Beispiel kümmert sich dann die Login Komponente nur um das Login und sonst nichts. Alles andere wird über die Events abgearbeitet.</p>
<h3>Fazit</h3>
<p>Ich verwende dieses Pattern sehr viel und es macht die Anwendung wartbarer und den Einbau von Erweiterungen einfacher. In anderen Sprachen wie .NET ist das Pattern bereits in die Sprache eingebaut.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/08/15/design-pattern-observerevents-mit-pear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

