<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://yellow-rainbird.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rainbird´s Blog : n-Tier</title><link>http://yellow-rainbird.de/blogs/rainbird/archive/tags/n-Tier/default.aspx</link><description>Ordnungsbegriffe: n-Tier</description><dc:language /><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Dienste einer n-Tier Anwendung in eine klare Hierarchie bringen</title><link>http://yellow-rainbird.de/blogs/rainbird/archive/2008/11/11/dienste-einer-n-tier-anwendung-in-eine-klare-hierarchie-bringen.aspx</link><pubDate>Tue, 11 Nov 2008 20:23:00 GMT</pubDate><guid isPermaLink="false">ca972313-08a2-482d-9df4-47656efefef6:52</guid><dc:creator>Rainbird</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://yellow-rainbird.de/blogs/rainbird/rsscomments.aspx?PostID=52</wfw:commentRss><comments>http://yellow-rainbird.de/blogs/rainbird/archive/2008/11/11/dienste-einer-n-tier-anwendung-in-eine-klare-hierarchie-bringen.aspx#comments</comments><description>&lt;p&gt;Auf der guide to C# Live! Winter Edition hatten wir einige Diskussionen über die Architektur von Business&lt;br /&gt;Anwendungen (&lt;em&gt;Ganz ähnlich übrigens auch auf mycsharp.de in folgendem Beitrag:&lt;br /&gt;&lt;/em&gt;&lt;a href="http://www.mycsharp.de/wbb2/thread.php?threadid=61812"&gt;&lt;em&gt;http://www.mycsharp.de/wbb2/thread.php?threadid=61812&lt;/em&gt;&lt;/a&gt;). Den von mir vorgestellte Ansatz, die einzelnen &lt;br /&gt;Dienste in Kategorieen einzuteilen und diese in einer Hierarchie anzuordnen, war manchen nicht ganz &lt;br /&gt;verständlich gewesen. Der Bitte, das Ganze doch mal aufzuzeichnen, bin ich nun nachgekommen.&lt;br /&gt;Folgende Skizze kann&amp;nbsp;hoffentlich Abhilfe schaffen und helfen, den Ansatz besser zu verstehen:&lt;/p&gt;
&lt;p&gt;&lt;img height="552" alt="Skizze hierarchischer Geschäftsdienste" src="http://yellow-rainbird.de/photos/allgemein/images/51/original.aspx" width="640" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Eine Dienste haben gar keine Pfeilspitzen abbekommen. Das liegt daran, dass in der Skizze keine Clients &lt;br /&gt;und auch keine Stapelverarbeitungsdienste (z.B. Rechnungsdruck) enthalten sind.&lt;/em&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&lt;br /&gt;Man kann sehr schön sehen, wie viele Abhängigkeiten es zwangsläufig gibt. Die Hierarchie gibt vor, dass&lt;br /&gt;Dienste nur andere Dienste konsumieren dürfen, wenn diese über ihnen angebordnet sind. Niemals dürfen&lt;br /&gt;Dienste andere Dienste konsumieren, die darunter oder auf gleicher Ebene angeordnet sind.&lt;br /&gt;Diese Hierarchie muss allerdings vom Entwickler-Team auch so eingehalten werden. Es ist ein Konzept&lt;br /&gt;bzw. eine Konvention. In einem drei bis vier Mann Team habe ich sehr gute Erfahrungen mit diesem Modell&lt;br /&gt;gemacht. In größeren Teams ist da, denke ich, die Qualitätssicherungs-Abteilung gefordert. Damit alle auch &lt;br /&gt;nach der Selben Hierarchie entwickeln, sollte diese unbedingt Dokumentiert werden (z.B. wie oben). &lt;br /&gt;&amp;nbsp;&lt;br /&gt;Ein Aspekt ist auf der Skizze allerings nicht abgebildet. Und zwar die Kommunikation nach außen. Wenn&lt;br /&gt;ein Dienst externe Dienste (also z.B. einer Fremd-Applikation) konsumieren soll, muss dies immer entkoppelt&lt;br /&gt;passieren. Das größe Problem dabei ist, Dinge wie Mandantenverwaltung, Sitzungen, Sicherheit und Locking&lt;br /&gt;mit der externen Anwendung auf einen Nenner zu bekommen. Portal-Adapter-Paarungen zwischen internem &lt;br /&gt;und externem Dienst können dabei für die Entkopplung und ggf. erforderliches Schnittstellen-Mapping sorgen.&lt;br /&gt;Ein generischer Weg wäre z.B. der BizTalk Server.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Wenn man SOA ernsthaft umsetzen möchte, muss es sogar so sein, dass alle Dienste theoretisch &lt;br /&gt;austauschbar sind. Das würde bedeuten, dass jeder Dienst auch eigene Kontrakte für alles, was er konsumiert. &lt;br /&gt;Ohne Bus-System geht dann natürlich nichts mehr. Der Entwicklungs- und Testaufwand vervielfacht sich, &lt;br /&gt;wenn die komplette Kommunikation über ein Bus-System laufen soll.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Aber auch ohne Bus-System bringt der Hierarchische-Ansatz eine Menge. Die Abhängigkeiten werden auf ein&lt;br /&gt;Mindestmaß reduziert und folgen klaren Regeln. Dienste lassen sich gut testen, da man für einen Test den &lt;br /&gt;Zugriff auf höher liegende Dienste auch auf einen Dummy-Dienst umleiten kann. Die Lösung ist in sich klar&lt;br /&gt;strukturiert und die Kommunikation zwischen den Diensten funktioniert über explizite Schnittstellen. Die&lt;br /&gt;Entwicklungsarbeit im Team lässt sich gut Aufteilen und parallele Entwicklung von Diensten ist - insofern&lt;br /&gt;man Contract-First durchzieht - auch kein Problem. Die Entwicklung solcher Dienste ist einfach und nicht an&lt;br /&gt;komplexe Container-Modelle oder Vererbungsbäume gebunden. Die Einarbeitungszweit für neue Entwickler ist&lt;br /&gt;minimal - vorausgesetzt die Infrastrukturdienste (oben gelb dargestellt) stehen schon und es wurde eine intuitive &lt;br /&gt;API für die Infrastruktur geschaffen (z.B. generischen Service-Locator, Microkernel, Statische Hilfsklasse für&lt;br /&gt;den Sicherheitsdienst und das Locking).&amp;nbsp; &lt;/p&gt;&lt;img src="http://yellow-rainbird.de/aggbug.aspx?PostID=52" width="1" height="1"&gt;</description><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Architektur/default.aspx">Architektur</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Komponenten/default.aspx">Komponenten</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Remoting/default.aspx">Remoting</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/n-Tier/default.aspx">n-Tier</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/SOA/default.aspx">SOA</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/WCF/default.aspx">WCF</category></item><item><title>guide to C# Live! Winter Edition 2008</title><link>http://yellow-rainbird.de/blogs/rainbird/archive/2008/11/11/guide-to-c-live-winter-edition-2008.aspx</link><pubDate>Tue, 11 Nov 2008 20:00:00 GMT</pubDate><guid isPermaLink="false">ca972313-08a2-482d-9df4-47656efefef6:50</guid><dc:creator>Rainbird</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://yellow-rainbird.de/blogs/rainbird/rsscomments.aspx?PostID=50</wfw:commentRss><comments>http://yellow-rainbird.de/blogs/rainbird/archive/2008/11/11/guide-to-c-live-winter-edition-2008.aspx#comments</comments><description>&lt;p&gt;&lt;a class="" href="http://www.guidetocsharplive.de/"&gt;&lt;img height="151" alt="Logo guide to C Sharp Live" src="http://yellow-rainbird.de/photos/allgemein/images/48/original.aspx" width="363" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ich war da! Es war eine tolle Veranstaltung. Golo hat den Teilnehmern &lt;br /&gt;in den drei Tagen die Themen&amp;nbsp;Software-Architektur, LINQ und WPF&lt;br /&gt;näher gebracht. Statt vieler Folien und langen Monologen, hat der&lt;br /&gt;&lt;a class="" href="http://www.des-eisbaeren-blog.de/"&gt;Eisbär&lt;/a&gt; auf Dynamik am Flipchart und viel Interaktion mit den &lt;br /&gt;Teilnehmern gesetzt. Deshalb war die Veranstaltung alles andere&lt;br /&gt;als langweilig. &lt;/p&gt;
&lt;p&gt;Am zweiten Tag habe ich noch einen kleinen Beitrag zum Thema&lt;br /&gt;&lt;a class="" href="http://msdn.microsoft.com/de-de/library/ms735119.aspx"&gt;Windows Communication Foundation&lt;/a&gt; beigesteuert. Den Quellcode&lt;br /&gt;meiner zwei kleinen WCF-Demos (&lt;em&gt;und der net.tcp-Versionen, die&lt;br /&gt;beim live Codieren leider nicht auf anhieb geklappt hatte&lt;/em&gt;) gibts&lt;br /&gt;hier zum runterladen: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://yellow-rainbird.de/files/folders/quellcode/entry49.aspx"&gt;http://yellow-rainbird.de/files/folders/quellcode/entry49.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Viel Spaß damit!&lt;/p&gt;&lt;img src="http://yellow-rainbird.de/aggbug.aspx?PostID=50" width="1" height="1"&gt;</description><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Architektur/default.aspx">Architektur</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Applikationsserver/default.aspx">Applikationsserver</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Windows.Forms/default.aspx">Windows.Forms</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/n-Tier/default.aspx">n-Tier</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/SOA/default.aspx">SOA</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Die neue erweiterte Version meines n-Tier Architekturbeispiels ist da!</title><link>http://yellow-rainbird.de/blogs/rainbird/archive/2008/04/12/die-neue-erweiterte-version-meines-n-tier-architekturbeispiels-ist-da.aspx</link><pubDate>Fri, 11 Apr 2008 22:53:00 GMT</pubDate><guid isPermaLink="false">ca972313-08a2-482d-9df4-47656efefef6:38</guid><dc:creator>Rainbird</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://yellow-rainbird.de/blogs/rainbird/rsscomments.aspx?PostID=38</wfw:commentRss><comments>http://yellow-rainbird.de/blogs/rainbird/archive/2008/04/12/die-neue-erweiterte-version-meines-n-tier-architekturbeispiels-ist-da.aspx#comments</comments><description>&lt;p&gt;Endlich ist es soweit. Ich habe die Zeit gefunden, das Beispiel im ursprünglich geplanten Umfang fertigzustellen. &lt;br /&gt;Das Ergebnis gibts im Download-Bereich von yellow-rainbird.de und auf &lt;a href="http://www.mycsharp.de/"&gt;www.mycsharp.de&lt;/a&gt; kostenfrei zum runterladen.&lt;/p&gt;
&lt;p&gt;&lt;a class="" title="n-Tier Architekturbeispiel Version 1.1.0.0" href="http://www.mycsharp.de/wbb2/thread.php?postid=291674#post291674"&gt;Jetzt herunterladen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Als kleines Zusatzfeature kann man nun auch die Oberflächensprache zur Laufzeit ändern. Dies zeigt auch, wie einfach man mit dem .NET Framework Anwendungen lokalisieren kann.&lt;/p&gt;
&lt;p&gt;&lt;img height="246" alt="Screenshot" src="http://yellow-rainbird.de/photos/allgemein/images/37/original.aspx" width="570" border="0" /&gt;&lt;/p&gt;&lt;img src="http://yellow-rainbird.de/aggbug.aspx?PostID=38" width="1" height="1"&gt;</description><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Architektur/default.aspx">Architektur</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Komponenten/default.aspx">Komponenten</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Remoting/default.aspx">Remoting</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Applikationsserver/default.aspx">Applikationsserver</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/Beispiel/default.aspx">Beispiel</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/n-Tier/default.aspx">n-Tier</category><category domain="http://yellow-rainbird.de/blogs/rainbird/archive/tags/SOA/default.aspx">SOA</category></item></channel></rss>