<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Guggat emol Blog &#187; Einbindung von SCRUM in vorgegebene Projektsetups</title>
	<atom:link href="http://www.baldenhofer.eu/blog/tag/architektur/feed" rel="self" type="application/rss+xml" />
	<link>http://www.baldenhofer.eu/blog</link>
	<description>Roland bloggt über IT, Programmieren und Linux</description>
	<lastBuildDate>Tue, 25 Oct 2011 22:53:01 +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>Einbindung von SCRUM in vorgegebene Projektsetups</title>
		<link>http://www.baldenhofer.eu/blog/it/einbindung-von-scrum-in-vorgegebene-projektsetups</link>
		<comments>http://www.baldenhofer.eu/blog/it/einbindung-von-scrum-in-vorgegebene-projektsetups#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:15:27 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Anforderung]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[wasserfall]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1884</guid>
		<description><![CDATA[Um das Projektportfolio, das Controlling und die Vergleichbarkeit von Projekten in Unternehmen sinnvoll abbilden zu können, wird häufig eine unternehmensweit geltende Projektvorgehensweise vorgegeben. An diese Vorgehensweise müssen sich die Gesamtprojektleiter halten und ihre Planung, das Projektcontrolling und das Reporting angleichen. In einem solchen Umfeld SCRUM einzusetzen stellt den Gesamtprojektleiter vor eine Herausforderung. Einerseits muss die [...]]]></description>
			<content:encoded><![CDATA[<p>Um das Projektportfolio, das Controlling und die Vergleichbarkeit von Projekten in Unternehmen sinnvoll abbilden zu können, wird häufig eine unternehmensweit geltende Projektvorgehensweise vorgegeben.  An diese Vorgehensweise müssen sich die Gesamtprojektleiter halten und ihre Planung, das Projektcontrolling und das Reporting angleichen.<br />
In einem solchen Umfeld SCRUM einzusetzen stellt den Gesamtprojektleiter vor eine Herausforderung. Einerseits muss die Planung sich an die Vorgaben des Unternehmens halten und andererseits kann SCRUM das geeignete Framework sein um mit mehr Sicherheit das Projektziel zu erreichen.<br />
In diesem Artikel wird erläutert, wie SCRUM in ein herkömmliches Projektsetup integriert werden kann.</p>
<p>In einem Projekt werden die einzelnen Themengebiete in sinnvolle Teilaspekte (Teilprojekte) gegliedert. Nehmen wir ein fiktives Projekt an, bei dem folgende Themengebiete erkannt und als Teilprojekte bearbeitet werden sollen:</p>
<ul>
<li>Infrastruktur Setup</li>
<li>Operational Management Setup</li>
<li>Applikationsentwicklung</li>
</ul>
<h3>Einsatz eines traditionellen Projektvorgehens</h3>
<p>Für das Infrastruktur Setup und das Operational Management Setup kann es durchaus Sinn ergeben ein traditionelles Projektvorgehen einzusetzen. So kann es vorkommen, dass ein normales Wasserfallvorgehen für die Erarbeitung der Lieferobjekte in diesem Bereich eingesetzt wird.</p>
<ul class="albumlistre">
<li><img src="http://www.baldenhofer.eu/blog/wp-content/uploads/2010/02/Wasserfall.png" alt="Wasserfall" title="Wasserfall" width="696" height="224" class="alignnone size-full wp-image-1885" />Projektphasen mit Meilensteinen im Wasserfallmodell</li>
</ul>
<p class="clear">In unserem Beispiel erhalten wir so einen Projektverlauf mit sechs Meilensteinen (M1-M6) an denen jeweils das Ende einer Projektphase markiert ist. Die Lieferergebnisse, die pro Meilenstein erreicht werden müssen, sind sauber beschrieben und können im Gesamtprojekt entsprechend überwacht werden.</p>
<h3>Scrum für die Applikationsentwicklung</h3>
<p>Bei der Applikationsentwicklung sind zu Projektbeginn noch nicht alle Anforderungen von allen Beteiligten richtig und vollständig beschrieben, bekannt und verstanden. Es ist mit vielen Änderungen zu rechnen. Den kompletten Projektscope zu beschreiben würde eine sehr teure Vor-, Grob- und Detailstudie erfordern.</p>
<p>Und selbst nach einer solchen Studie sind wir noch nicht sicher, dass alle Anforderungen bekannt sind. Während der Projektlaufzeit ändern sich die äußeren Bedingungen, neue Anforderungen kommen hinzu und bestehende Anforderungen werden nicht mehr benötigt. Es wäre somit vernünftig, eine agile Vorgehensweise für dieses Teilprojekt einzusetzen. Das entsprechende Projektvorgehen ist in folgender Skizze erläutert.</p>
<ul class="albumlistre">
<li><img src="http://www.baldenhofer.eu/blog/wp-content/uploads/2010/02/Scrumallein.png" alt="Scrumallein" title="Scrumallein" width="477" height="247" class="alignnone size-full wp-image-1886" />Projektvorgehen nur mit SCRUM</li>
</ul>
<p class="clear">Was beim Wasserfallvorgehen als Vorstudie bezeichnet wurde, kann bei SCRUM als Vision verstanden werden. Es wird grob beschrieben, was mit dem System erreicht werden soll. Danach werden mehrere Sprints durchgeführt, die immer dem gleichen Muster folgen.</p>
<ul>
<li><strong>Sprint Planungsmeeting</strong> 1 und 2 um den Umfang und die Qualität der Lieferergebnisse festzulegen</li>
<li>Development mit <strong>Daily-Scrum-Meetings</strong> um jeden Tag schnell auf auftretende Schwierigkeiten reagieren zu können</li>
<li><strong>Sprint Release</strong> stellt einen neuen Applikationsrelease zur Verfügung der vom Kunden bereits verwendet werden kann. Falls, wie in unserem Beispiel, die Infrastruktur noch nicht bereit steht, kann dieser Release für die Integrationstests verwendet werden.</li>
<li><strong>Sprint Retrospektive</strong> liefert das Feedback um festlegen zu können, was in diesem Sprint gut lief und was verbessert werden soll.</li>
</ul>
<p>Dieser Zyklus wiederholt sich bis alle vom Kunden tatsächich benötigten Elemente umgesetzt worden sind. Nach jedem Sprint kann der Kunde mit dem lauffähigen Release sehen ob er die Software erhält, die er wirklich benötigt und kann sein Feedback liefern um Änderungen am System zu erreichen. </p>
<h3>Scrum in das Gesamtprojekt einbinden</h3>
<p>Die hier gezeigte Vorgehensweise lässt sich sehr elegant in das Gesamtprojekt einbinden.</p>
<ul>
<li>Es muss dafür gesorgt werden, dass die einzelnen Sprintzyklen mit den Meilensteinen des Wasserfallvorgehens übereinstimmen.</li>
<li>Weiterhin muss erreicht werden, dass die Lieferobjekte des Wasserfallmodells mit den einzelnen Releases der Sprints in Einklang gebracht werden können.</li>
</ul>
<p>Das klingt komplizierter als es ist. In den ersten Releases einer Applikationsentwicklung wird die Architektur erstellt, die Umsetzungsrichtlinien festgelegt und die einzusetzenden Tools und Libraries definiert. Weiterhin kann in den ersten Releases schon gut erkannt werden, wie das Zielsystem aussehen wird. Diese Erkenntnisse können als Vor- und Grobstudie angesehen werden.</p>
<p>Nach weiteren Sprints ist sichergestellt, dass die Detaildokumentation erarbeitet wurde. Bei Scrum besteht die Devise, dass der Code die Dokumentation ist. Aus dem Code kann mit Reverse-Engineering und der Beschreibung der wichtigsten Architekturkonzepte durchaus eine sinnvolle Dokumentation erstellt werden.<br />
Für die Planung im Projekt ergibt sich somit folgende Vorgehensweise:</p>
<ul class="albumlistre">
<li><img src="http://www.baldenhofer.eu/blog/wp-content/uploads/2010/02/Gesamtprozess.png" alt="Gesamtprozess" title="Gesamtprozess" width="696" height="224" class="alignnone size-full wp-image-1887" />Gesamtprozess der Projektvorgehensweise</li>
</ul>
<p class="clear">Die Sprints werden auf die einzelnen Projektphasen aufgeteilt.<br />
Nach der Vorstudie steht schon ein erster Prototyp zur Verfügung, mit dessen Hilfe die Grobstudie zusammen mit dem Kunden erarbeitet werden kann. Jederzeit kann auf Änderungen und Schwierigkeiten Einfluss genommen werden.</p>
<p>Falls ein Standard-Sprintzyklus sich nicht mit den Meilensteinen vereinbaren lässt, kann man entweder längere Sprints durchführen, oder die Sprints verkürzen (Siehe die „S“ Sprints). Unsere Sprints lassen sich vom Schwerpunkt her den einzelnen Projektphasen zuordnen.</p>
<ul>
<li>So kann dafür Sorge getragen werden, dass nach der <strong>Vorstudie</strong> eine Vision und ein erster architektonischer Prototyp steht.</li>
<li>Nach der <strong>Grobstudie</strong> sind erste Businessprozesse umgesetzt und können während der Detailstudie verfeinert werden.	</li>
<li>Bei der <strong>Implementation</strong> kann die Integration der Applikation in die Infrastrukturkomponenten und operationellen Prozesse angegangen werden.</li>
<li>Bei den abschließenden <strong>Tests</strong> sind die Applikationskomponenten bereits getestet und es geht vor allem um die Integration in die Systemumgebung.</li>
<li>Die <strong>Transition</strong> kann dazu verwendet werden, abschließende Änderungen einzupflegen oder die Übergabe an den Betrieb zu managen.</li>
</ul>
<p>Die Schwerpunkte der einzelnen Sprints sind in der folgenden Grafik angedeutet.</p>
<ul class="albumlistre">
<li><img src="http://www.baldenhofer.eu/blog/wp-content/uploads/2010/02/Scrumprozess.png" alt="Scrumprozess" title="Scrumprozess" width="526" height="247" class="alignnone size-full wp-image-1888" />Scrumprozess in den Farben des Wasserfallvorgehens</li>
</ul>
<p class="clear">Durch die Übernahme der Farben aus dem Wasserfallvorgehen werden die Schwerpunkte des Gesamtprojekts auf das Teilprojekt übertragen. Die Entwickler können sich in den Projektphasen wiederfinden.</p>
<h3>Fazit</h3>
<p>Mit dieser Vorgehensweise ändert sich für die beiden Welten (Scrum und Wasserfall) sehr wenig. Die einzelnen Projektbereiche können miteinander kommunizieren und wir erhalten uns die einfache Rapportierbarkeit des Wasserfallmodells und die Agilität von Scrum.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/einbindung-von-scrum-in-vorgegebene-projektsetups/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Security fummelt man am Besten gleich in die Architektur hinein</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/security-fummelt-man-am-besten-gleich-in-die-architektur-hinein</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/security-fummelt-man-am-besten-gleich-in-die-architektur-hinein#comments</comments>
		<pubDate>Fri, 26 Jun 2009 09:10:40 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Newssystem]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1641</guid>
		<description><![CDATA[Ich habe mal meinen Enterprise Architect &#8220;vorgeglüht&#8221; und mich an die grundlegende Architektur des Newssystems gemacht. Da ich als Basispattern das Model View Controller Pattern verwende, und die einzelnen Aktionen nach dem CRUD (Create, Read, Update, Delete) Pattern aufgebaut sind, fing ich mit den Modellen an. Es kommen eine ganze Menge Modelle zusammen, wenn wir [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mal meinen Enterprise Architect &#8220;vorgeglüht&#8221; und mich an die grundlegende Architektur des Newssystems gemacht.<br />
Da ich als Basispattern das Model View Controller Pattern verwende, und die einzelnen Aktionen nach dem CRUD (Create, Read, Update, Delete) Pattern aufgebaut sind, fing ich mit den Modellen an.<br />
Es kommen eine ganze Menge Modelle zusammen, wenn wir das Newssystem schön und sauber gestalten wollen.</p>
<h3>Mach dir zuerst über die Security Gedanken</h3>
<p>Als ich so meine Architekturtapete pinselte, dachte ich logischerweise auch über die Zugriffsrechte der Anwender nach.<br />
Es gibt, wie immer, verschiedene Vorgehensweisen und Möglichkeiten wie man seine Sicherheitsregeln in das System einbaut.<br />
Hier sind ein paar Gedanken dazu.</p>
<h4>Authorisierung in den Modellen</h4>
<p>Man kann z.B. die Zugriffsrechte fest in den Modellen einschreiben.<br />
Das bedeutet, das jeweilige Modell kontrolliert, ob der Anwender überhaupt diese Aktion durchführen darf.<br />
Dazu können hart kodierte Regeln verwendet werden. Das bedeutet der Redakteur darf nur seine eigenen Artikel verändern, also prüfen wir ob der aktuell angemeldete Redakteur im Artikel eingetragen ist.</p>
<h4>Vorteile</h4>
<ul>
<li>Wir können die Regeln einmal festlegen und eintragen</li>
<li>Die Sicherheit wird auf Modellebene gesteuert<br />
    Ein versehentliches falsches Einfügen und Verändern sollte verhindert werden können.</li>
</ul>
<h4>Nachteile</h4>
<ul>
<li>Die Regeln stehen hart kodiert im Modell drin<br />
    Änderungen an den Sicherheitsregeln müssen in den Modellen vorgenommen werden. Das nachträgliche Anpassen für einen Kunden ist nicht möglich. Wenn aber ein Kunde will, dass der Systemadministrator auch Artikel bearbeiten kann, dann geht das nicht. Wenn das jedoch ein Kundenwunsch ist, finde ich es nicht richtig unser System schon von Anfang an so einzuschränken.</li>
<li>Wenn ein zentrales Security System verwendet werden soll, dann können die Zugriffsregeln nicht von dort aus gesteuert werden. Das System ist in sich geschlossen und nicht erweiterbar.</li>
<li>Duplizierung von Code und Verantwortlichkeiten auf verschiedenen Layern<br />
    Falls die Regeln auch Auswirkungen auf die Views haben, wie Beispielsweise die Anzeige von Löschbuttons nur wenn du auch die notwendigen Rechte hast, dann muss man diese Regeln auch noch in der View implementieren.</li>
<li>Seperation of Concern verletzt<br />
    Das gefällt mir als Architekt natürlich gar nicht. Wieso soll sich eine View oder ein Modell um die Berechtigungen des Users im Detail kümmern? Das macht die Komponenten dick und fett und das kann kein guter Ansatz sein.</li>
</ul>
<p>Oha! Das war noch nichts.<br />
Gut, ich behaupte mal die meisten Systeme sind genau so, oder so ähnlich aufgebaut. Aber wenn es falsch ist, dann ist es auch falsch wenn es meistens so gemacht wird.<br />
Also gut, ein weiterer Versuch:</p>
<h3>Security Rules nur in den Controllern</h3>
<p>Der Controller ist ja dafür da, die Abläufe im System zu steuern.<br />
Da wäre es doch nur rechtens, wenn er sich auch um die Security kümmert.<br />
Wenn unser lieber User jetzt eine Aktion ausführen will, die er nicht ausführen darf, dann hindert ihn der Controller daran.</p>
<h4>Vorteile</h4>
<ul>
<li>Die Zugriffsdefinition wird an einer Stelle gehalten<br />
    Juchu! Klingt doch schon eher nach Seperation of Concerns gelle?. Wenn wir was ändern wollen, dann ändern wir den jeweiligen Controller. View und Modell kümmern sich um die Ansicht und die Speicherung.</li>
<li>Flexibilität der Rechtevergabe deutlich erhöht<br />
    Da wir nun eine zentrale Komponente haben, in der wir die Rechtevergabe steuern, sollte es deutlich leichter sein diese zu verändern.</li>
</ul>
<h4>Nachteile</h4>
<ul>
<li>Auf Modellebene wird keine Zugriffssteuerung implementiert.<br />
    Das ist ein ziemlich dicker Nachteil. Das Modell muß permanent und immer sich um die Richtigkeit der Daten kümmern. Wenn wir dem Modell jetzt diese Verantwortung entziehen, dann muss der Controller immer sauber programmiert sein. Damit entsteht eine Sicherheitslücke. Denn wer weiß? Vielleicht umgeht ein versierter Hacker unseren Controller?</li>
<li>Zentrale Rechteverwaltung nicht möglich<br />
    Da wir wieder unsere Rechteverwaltung im System behalten, können wir eine Verwaltung nicht in einer externen Komponente auslagern. Unser System bleibt dick und wenn wir es irgendwo integrieren wollen, bleibt dem Administrator nichts anderes übrig als verschiedene Administartionstools zu verwenden.</li>
</ul>
<p>Hm&#8230; Schon mal nicht schlecht, bis auf die Nachteile.<br />
Mir gefällt diese Implementation jedoch schon viel besser als die Erste Variante.<br />
Vielleicht gibts da noch was anderes?</p>
<h3>Rechteverwaltung in eigene Komponenten auslagern und über Interface ansteuern</h3>
<p>Das klingt schön kompliziert und gefällt deshalb dem Architekt <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Quatsch, das ist gar nicht kompliziert, hilft uns jedoch die Komplexität zu senken und später ein anderes Rechtesystem mitzuverwenden.<br />
Wir erstellen, z.B. mit einem Singleton oder Factory Pattern, ein eigenständiges Sicherheitsregelwerk. Dieses Regelwerk wird für die Standalone Lösung des Newssystems verwendet.<br />
Die Authorisierung wird über ein Interface angesprochen.<br />
Dieses Interface bietet mindestens eine Funktion.<br />
Und die nennen wir z.B. <span class="code">isActionAllowed(actionID, component)</span>.<br />
Wir übergeben dieser Methode die Aktion die zur Zeit aufgerufen wurde und die Komponente auf die diese Aktion angewendet wird.<br />
Die Methode liefert <strong>true</strong> zurück, wenn der Anwender diese Aktion durchführen darf. Und, rate mal, <strong>false</strong> falls er es nicht darf.<br />
Unglaublich digital! <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Jetzt können wir in jedem Modell und in jedem Controller oder View nach belieben Regeln festlegen und im zentralen Authorisierungssystem implementieren.</p>
<h4>Vorteile</h4>
<ul>
<li>Zentrale Verwaltung aller Rechte möglich<br />
    Vorbei sind die Probleme, dass wir Rechte nicht zentral verwalten können. Je nach Strategie können wir eine Whitelist oder eine Blacklist implementieren. Will heißen, dass wir z.B. nur <strong>true</strong> zurückliefern, wenn die Komponente und Aktion bekannt und erlaubt ist. Oder wir liefern <strong>true</strong> zurück wenn wir keinen Plan haben was da aufgerufen wurde. Dann überprüfen wir nur, was wir auch schon kennen.</li>
<li>Auf Modellebene kann Rechteverwaltung realisiert werden.<br />
    Wenn wir mindestens alle Modelle in der Rechteverwaltung aufnehmen, ist eine Rechtesteuerung auf Modellebne möglich.</li>
<li>Größte Flexibilität bei der Rechtevergabe<br />
    Klar, wir können hier die wildesten Rechtesteuerungen erfinden. Aber Vorsicht! Es ist nicht cool man wenn man damit jedem Anwender alle Rechte gibt.</li>
<li>Einfaches Testen<br />
    Da die Security in einem eigenen System zusammengefasst ist, können wir für jede Aktion von CRUD und jeder Komponente einen <strong>true</strong> und <strong>false</strong> Testfall generieren. Wir können dann sehr sicher sein, dass z.B. die Modelle nur speichern wenn sie auch wirklich speichern dürfen.</li>
</ul>
<h4>Nachteile</h4>
<p>Was? So eine coole Lösung und Nachteile?<br />
Leider ja&#8230;</p>
<ul>
<li>Modelle haben keine direkte Kontrolle über Authorisierung<br />
    Dieser Nachteil ist der gleiche wie wenn wir die Rechtevergabe dem Controller übergeben. Der Entwickler und Administrator unserer Rechtesystems muss wissen was er tut. Das Modell unterstützt ihn hierbei nicht.</li>
<li>Externe Rechtevergabe kann Sicherheitslücken verursachen<br />
    Klar, wenn wir unsere Security &#8220;outsourcen&#8221; dann verlieren wir innerhalb des Systems die Kontrolle darüber. Aber mal ehrlich: Wir bauen hier ein Newssystem, im schlimmsten Fall wird mal eine schlechte Nachricht geschrieben oder gelöscht&#8230;</li>
</ul>
<h3>Wozu hat sich jetzt der (graue) Star Architekt entschlossen?</h3>
<p>Ratet mal!<br />
Ich bin ein faules Tier und möchte die Flexibilität so hoch wie möglich halten.<br />
Also werde ich in die Architektur die dritte Variante einbauen.<br />
Wie bitte? Faul und dann so ein System?<br />
Genau deshalb. Wenn wir nur eine Komponente verwalten müssen, mit der wir die Authorisierung durchführen, sparen wir uns über die Zeit eine menge Arbeit.<br />
Wenn die einzelnen Methoden einfacher aufgebaut sind, können wir sie schneller uns sicherer testen.<br />
Dann kann ich ruhig schlafen und habe das gute Gefühl keine vollständige Standalone Lösung entwickelt zu haben.</p>
<h3>Hätten wir diese Lösung auch noch später einbauen können?</h3>
<p>Ja, das hätten wir gekonnt. Doch wir wären permanent über den User und seine Berechtigungen gestolpert. Im schlimmsten Fall hätten wir die einzelnen Berechtigungen schon irgendwie in den Controller, oder noch schlimmer, nur in die Views eingebaut.<br />
In den Views wäre besonders schlimm, da das erste was ein böser Bube umgehen kann die View ist. Ein Roboter braucht keine View&#8230;</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/security-fummelt-man-am-besten-gleich-in-die-architektur-hinein/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Wieso will ich das Newssystem nicht als WordPress Plugin erstellen?</title>
		<link>http://www.baldenhofer.eu/blog/it/wieso-will-ich-das-newssystem-nicht-als-wordpress-plugin-erstellen</link>
		<comments>http://www.baldenhofer.eu/blog/it/wieso-will-ich-das-newssystem-nicht-als-wordpress-plugin-erstellen#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:37:55 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Newssystem]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1318</guid>
		<description><![CDATA[Jetzt habe ich schon verstanden, dass ich auch WordPress verwenden darf und dann will ich das Newssystem nicht als Plugin bauen. Wieso bin ich denn nur so schwierig? Naja, ich möchte nicht noch komplexere Systeme erstellen wenn es nicht sein muss. Klar, die Views könnte ich über den RSS Feed auslesen und dann einfach das [...]]]></description>
			<content:encoded><![CDATA[<p>Jetzt habe ich schon verstanden, dass ich auch WordPress verwenden darf <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  und dann will ich das Newssystem nicht als Plugin bauen.<br />
Wieso bin ich denn nur so schwierig?<br />
Naja, ich möchte nicht noch komplexere Systeme erstellen wenn es nicht sein muss.<br />
Klar, die Views könnte ich über den RSS Feed auslesen und dann einfach das schöne XML interpretieren.<br />
Dazu brauch ich kein WordPress und somit kann ich auch auf kleinen Webseiten die witzigen kleinen dynamischen Ausgaben reinfummeln. Ist das Leben nicht prachtvoll? <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Wenn also die Views kein Problem darstellen, wieso dann nicht einfach den Adminbereich entsprechend anpassen und gut ist?</h3>
<p>Das ist eine berechtigte Frage.<br />
Wie immer gibt es pro- und cons dafür.<br />
Wenn ich an meine letzten Kunden denke, dann möchten die so schnell wie möglich so wenig wie möglich eingeben.<br />
Das bedeutet, dass sie keine großen Administrationsoberflächen diesen Menschen unterjubeln kann.<br />
Wenn die plötzlich sich in der Mächtigkeit von WordPress wiederfinden sollen, dann sagen sie zu mir: &#8220;Vielen Dank Roland! Kannst du bitte dort zur Türe hinausgehen und diese von außen schließen? Wir wollen mit dir nichts mehr zu tun haben!&#8221;<br />
Und das mag ich nicht. Vor allem wenn es draußen regnet und kalt ist&#8230;<br />
Geschmäcker sind verschieden. Und wenn diese Menschen eine einfache Oberfläche haben wollen, dann sollen sie diese bekommen.<br />
Wenn sie z.B. zuerst den Text und dann den Titel schreiben wollen, also mein geliebtes Beispiel dass ich immer wieder bringe, dann sollen sie auch das tun können.<br />
Ich möchte die Software so generisch halten, dass ich in der Lage bin die verschiedenen Welten miteinander zu verbinden.<br />
Falls ich dann doch noch auf die Idee komme dieses Newssystem als Plugin zu realisieren ist dass auch ok.<br />
Aber im Moment möchte ich noch ein wenig herumphillosophieren und mir alle Möglichkeiten anschauen.</p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/wieso-will-ich-das-newssystem-nicht-als-wordpress-plugin-erstellen/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Architekturprinzip Separation of Concerns</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/architekturprinzip-separation-of-concerns</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/architekturprinzip-separation-of-concerns#comments</comments>
		<pubDate>Wed, 25 Feb 2009 23:28:43 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Architektur]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=233</guid>
		<description><![CDATA[Normalerweise ist es nicht sinnvoll, alle Funktionalitäten in einer Datei unterzubringen. Häufig wird leider alles in eine Datei reingefummelt. Es gibt hunderte von schlechten Beispielen bei denen in einer Datei folgende Sprachelemente vorhanden sind: HTML In einer Datei findet sich HTML Tags. Diese beinhalten die Dokumentenstruktur die auf den Webclient dargestellt werden soll. CSS Das [...]]]></description>
			<content:encoded><![CDATA[<p>Normalerweise ist es nicht sinnvoll, alle Funktionalitäten in einer Datei unterzubringen.<br />
Häufig wird leider alles in eine Datei reingefummelt. Es gibt hunderte von schlechten Beispielen bei denen in einer Datei folgende Sprachelemente vorhanden sind:</p>
<dl>
<dt>HTML</dt>
<dd>In einer Datei findet sich HTML Tags. Diese beinhalten die Dokumentenstruktur die auf den Webclient dargestellt werden soll.</dd>
<dt>CSS</dt>
<dd>Das Cascating Stylesheet wird nicht in einer eigenen Datei ausgelagert sondern per inline Definition in das HTML Dokument mit eingebunden.</dd>
<dt>JavaScript</dt>
<dd>Die Funktionen werden nicht in eine Datei ausgelagert sondern gerade auch noch reingefummelt. Damit hat man schon ziemlich viel verschiedenes Sprachgewirr beisammen. Aber damit sind nur die auf dem Webclient zu interpretierenden Sprachelemente hinterlegt. Jetzt kommen noch die Serverbasierten Sprachelemente hinzu.</dd>
<dt>PHP</dt>
<dd>Viele bauen ihre PHP Dokumente und fummeln da gleich alles was es auf dem Client zu tun gibt mit rein. Das Dokument ist wirklich weltklasse zu lesen! Das ist so ähnlich, wie wenn du in einem Dokument Englisch, Deutsch, Spanisch und Russisch miteinander kreuzt. Aber damit nicht genug. Es geht noch besser&#8230;</dd>
<dt>SQL</dt>
<dd>Ja, auch noch komplexe Datenbankabfragen müssen unbedingt mit in das Dokument rein. Und dann haben wir viel beieinander und fühlen uns irgendwie wie beim Turmbau zu Babel&#8230;</dd>
</dl>
<h3>Warum ist dass nicht gut?</h3>
<p>Wenn man mal anschaut wo welche Programmiersprachen ausgeführt und interpretiert werden, ist es sinnvoll auch die Dateien entsprechend anzuordnen. Wieso soll sich ein Server mit JavaScript rumschlagen? Warum soll die Darstellung auf dem Server interpretiert werden?<br />
Eben, dass soll nicht auf dem Webserver passieren.<br />
Eine gute Architektur sorgt dafür, dass alle verschiedenen Sprachelemente und Komponenten dort installiert und ausgeführt werden wo sie wirklich gebraucht werden. Weiterhin kann man sehr gut die einzelnen Sprachen in verschiedene Dateien auslagern und somit eine gut zu testende Applikation erstellen.<br />
Denk immer dran. Deine Applikation wird einen Fehler haben und du musst diesen Fehler in einem halben Jahr finden. Dann bist du froh, wenn du deine Programmteile sinnvoll geordnet hast.</p>
<h3>Was bedeutet jetzt Seperations of Concern?</h3>
<p>Wir werden die Webapplikationen immer so gestalten, dass die Aktivitäten an den Orten ausgeführt werden, wo sie wirklich notwendig sind.<br />
Folgende Aktivitäten werden normalerweise benötigt:</p>
<dl>
<dt>Präsentation</dt>
<dd>Auf dem Webbrowser muss von unserer Webapplikation die Ein- und Ausgabeelemente dargestellt werden. Ein Anwender möchte ein Textfeld vorfinden um seinen Namen einzutragen. Also wird HTML und CSS auf dem Webbrowser dargestellt und hierfür auch bereit gestellt.</dd>
<dt>Präsentations Controller</dt>
<dd>Der Präsentations Controller einer Webapplikation steuert die Programmabläufe bei der Eingabe. Er kümmert sich um einfache Typüberprüfungen, also ob ein String auch wirklich Text beinhaltet und ob eine Zahl als Zahl und nicht als String eingegeben wurde. Weiterhin können einfache Algorithmen, wie Beispielsweise die Suche nach einer Auswahl von Städten, in diesem Controller abgehandelt werden. Dieser Controller sorgt dafür, dass die Webapplikation für den Anwender schnell und einfach zu bedienen ist. Somit wird der Code sehr nah beim Anwender benötigt und wir liefern diesen Code an den Webclient aus. Der Webclient interpretiert diesen Code.</dd>
<dt>Business Logic Controller</dt>
<dd>Hierbei handelt es sich um die Abläufe die benötigt werden um die Daten aus dem Web zu speichern und zu verändern. Bei einer Autovermietung wird die Businesslogik benötigt um die einzelnen Autos an die Kunden übergeben zu können. Diese Logik ist dort wo die Daten sind, also auf dem Webserver.</dd>
<dt>Modelle</dt>
<dd>Die Daten werden in Datenbanken oder in anderen Datenstrukturen auf dem Server abgespeichert. Modelle verwalten einzelne Datensätze und helfen die Daten konsistent halten. Die Logik für die Modelle wird auf dem Webserver, die Daten selbst jedoch meistens im Datenbankserver gehalten.</dd>
<dt>Persistence Model</dt>
<dd>Auf dem Datenbankserver werden die Modelle persistent gespeichert. Um diese Speicherung beschreiben zu können, werden die Persistenzmodelle von den logischen Modellen getrennt. So können Modelle für Datenbanken oder für Fileserver erstellt werden.</dd>
<dt>SQL und SQL Prepared Statemenents</dt>
<dd>Die SQL Sprachelemente werden normalerweise auf dem Webserver installiert. Es gibt jedoch auch optimierte SQL Statements die direkt auf dem SQL Server installiert werden. Diese werden vorübersetzt und können schneller ausgeführt werden. </dd>
</dl>
<p>In der folgenden Grafik habe ich die auf der linken Seite die Sprachen und auf der rechten Seite Architekturelemente abgebildet. Dieses Deployment Diagramm soll zeigen auf welcher Komponente die jeweiligen Elemente ausgeführt werden.<br />
<img src="/images/blog/WebapplicationDeploymentModel.png" alt="Komponenten und die ausführbaren Elemente" /></p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/architekturprinzip-separation-of-concerns/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Programmieren]]></series:name>
	</item>
		<item>
		<title>Enterprise Architect</title>
		<link>http://www.baldenhofer.eu/blog/gentoo/enterprise-architect</link>
		<comments>http://www.baldenhofer.eu/blog/gentoo/enterprise-architect#comments</comments>
		<pubDate>Fri, 06 Feb 2009 13:26:48 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Asus]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Asus Eee]]></category>
		<category><![CDATA[Editor]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/gentoo/enterprise-architect</guid>
		<description><![CDATA[Enterprise Architect ist eine Kaufsoftware die ich für die Analyse und Erstellung von Softwarearchitekturen verwende. Es verwendet die verschiedenen UML Darstellungen um die verschiedenen Architekturaspekte darzustellen. Das Preis-Leistungsverhältnis für die Software empfinde ich für den Funktionsumfang als sehr gut. Um den Enterprise Architect auf einer Linux Plattform verwenden zu können, ist eine CrossOver Installation notwendig. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sparxsystems.at/">Enterprise Architect</a> ist eine Kaufsoftware die ich für die Analyse und Erstellung von Softwarearchitekturen verwende. Es verwendet die verschiedenen UML Darstellungen um die verschiedenen Architekturaspekte darzustellen. Das Preis-Leistungsverhältnis für die Software empfinde ich für den Funktionsumfang als sehr gut. Um den Enterprise Architect auf einer Linux Plattform verwenden zu können, ist eine CrossOver Installation notwendig. Es handelt sich um eine windowsbasierte Applikation die diesen Emulator benötigt.<br />
<img src="/images/blog/enterprise.jpg" alt="Screenshot vom Enterprise Architect auf dem Asus Eee" /></p>
<hr /><h2>Ähnliche Beiträge</h2><ul></ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis für Feedleser: Beiträge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/gentoo/enterprise-architect/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Asus Softwarepakete]]></series:name>
	</item>
	</channel>
</rss>

