<?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>UGamela Blog &#187; ORM</title>
	<atom:link href="http://ugamela-blog.pheelgood.net/tag/orm/feed/" rel="self" type="application/rss+xml" />
	<link>http://ugamela-blog.pheelgood.net</link>
	<description>Entwicklung eines Browsergames</description>
	<lastBuildDate>Mon, 12 Dec 2011 18:28:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Phlame Engine: Entwurf Nr. 3</title>
		<link>http://ugamela-blog.pheelgood.net/2008/11/22/phlame-engine-entwurf-nr-3/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/11/22/phlame-engine-entwurf-nr-3/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 12:29:41 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Phlame]]></category>
		<category><![CDATA[Phlame Engine]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=155</guid>
		<description><![CDATA[Bevor ich meinen neuen Entwurf erkläre, der übrigens auf Entwurf Nr. 2 basiert &#8211; ich habe also nicht wieder alles verworfen -, möchte ich eine Analogie voranstellen: Anfängliches Programmieren ist wie Gartenhäuschen bauen Gutes Pogrammieren ist wie schöne, verzierte Gartenhäuschen bauen Professionelles Programmieren ist wie Hochhäuser bauen Dies habe ich am Mittwoch, als ich den [...]]]></description>
			<content:encoded><![CDATA[<p>Bevor ich meinen neuen Entwurf erkläre, der übrigens auf Entwurf Nr. 2 basiert &#8211; ich habe also nicht wieder alles verworfen -, möchte ich eine Analogie voranstellen:</p>
<blockquote><p>Anfängliches Programmieren ist wie Gartenhäuschen bauen</p>
<p>Gutes Pogrammieren ist wie schöne, verzierte Gartenhäuschen bauen</p>
<p>Professionelles Programmieren ist wie Hochhäuser bauen</p></blockquote>
<p><span id="more-155"></span>Dies habe ich am Mittwoch, als ich den Uni für Einsteiger Tag in Karlruhe besucht habe, bei einem Professor für Informatik in einer Präsentation gesehen und es gefällt mir sehr gut, weil es bestens auf das Problem hinweist:</p>
<blockquote><p>Hochhäuser sind keine großen Gartenhäuschen!</p></blockquote>
<p>Beim Hochbau muss man noch viel mehr Statik und weitere Probleme beachten und beim Programmieren ist das nicht anders. Man kann &#8211; selbst mit gutem Code &#8211; nicht so einfach große Projekte aufziehen.</p>
<p>Ich lerne momentan den Hochbau und hoffe mit diesen Kenntnissen ein ansehnliches Haus hochziehen zu können. Sobald das steht, wird es wieder einfacher, die Verzierung eines Hochhauses wird wohl nicht schwieriger als das eines Gartenhäuschens und ich werde Hilfe brauchen, denn es wird viel zu tun geben.</p>
<p><strong>Nun zu meinen neuen Entwurf</strong></p>
<p>Wer noch den zweiten Entwurf kennt wird sich wundern, weil ich ein paar Sachen umbenannt habe. DataHandler heißt nun Service und Model Phlame, Sub oder Modul.</p>
<p>Ich bitte nun die, die nicht den zweiten Entwurf kennen, einen Blick darauf zu werfen, damit ich diesen Teil nicht wiederholen muss. <a href="http://ugamela-blog.pheelgood.net/2008/09/26/phlame-engine-der-entwurf-nr2/">http://ugamela-blog.pheelgood.net/2008/09/26/phlame-engine-der-entwurf-nr2/</a></p>
<div style="float:left;"><a href="http://ugamela-blog.pheelgood.net/wp-content/uploads/2008/11/entwurf3-diagramm-ueberblick.gif"><img class="size-medium wp-image-156 alignleft" title="entwurf3-diagramm-ueberblick" src="http://ugamela-blog.pheelgood.net/wp-content/uploads/2008/11/entwurf3-diagramm-ueberblick-300x200.gif" alt="Diagramm zum dritten Entwurf" width="300" height="200" /></a></p>
<div class="mceTemp">
<dl id="attachment_156" class="wp-caption alignleft" style="width: 310px;">
<dd class="wp-caption-dd">Diagramm zum dritten Entwurf</dd>
</dl>
</div>
</div>
<p>Der Requester (mir fällt kein besserer Name ein) führt die Abfragen gegen die Datenbank aus. Zwischen den Requester und den Service wird ein Cachemechanismus mit der Session gebaut (der Requester wird <a title="Wikipedia: Decorator" href="http://de.wikipedia.org/w/index.php?title=Decorator">dekoriert</a>). Das sollte einige Queries einsparen. Auch das Datenbankupdate wird selbständig und querysparend vom Requester übernommen. Pro Tabelle gibt es einen Requester.  Modul-, Sub- und Phlamerequester unterscheiden sich wahrscheinlich an ein paar Stellen. Gleichzeitig dient der Requester als Spiecher für Queryschablonen für die jeweilige Tabelle. Wahrscheinlich lässt sich auch durch austauschen der Requester die Datenbank wechseln (auf PostgreSQL zB), aber vorerst habe ich nur MySQL mit mysqli vorgesehen.</p>
<p>Der Service wird &#8211; im Gegensatz zum Requester &#8211; vom Programmierer direkt angesprochen und ist einmalig überall verfügbar (<a title="Blogeintrag; Entwurfsmuster" href="http://ugamela-blog.pheelgood.net/2008/11/18/php-programmierung-entwurfsmuster-design-patterns/">Singleton</a>). Er verwaltet die Instanzen eines Objektes, die im Umlauf sind, und ruft den Requester auf. Das packen der Datenarrays in Objekte geschieht im Service bzw. in der Fabrik, mit der Phlame, Sub, Modul oder einer entsprechenden abgeleiteten Klasse.</p>
<p>Phlame (Flamme oder Flämmchen zu deutsch^^, nicht von Belang) ist eine Vorlage für diverse Objektformen, die von dieser Klasse abgeleitet werden können. Das bedeutet sie enthält ein paar Vorgaben, wie ein solches Spielobjekt auszusehen hat. Vorgesehene Ableitungen sind Sonnensystem (auch bekannt als Planeten..) und Flotte.</p>
<p>Sub ist eine Untergruppierung von Phlame. Der Aufbau ist der selbe wie beim Phlame selbst, nur das der Service vom Phlame-Service oder der Fabrik aufgerufen wird, der die Subs in das Phlame schachtelt. Vorgesehene Ableitungen sind Schiffe und Gebäude.</p>
<p>Modul ist Sub sehr ähnlich, stellt aber nur einzelne Eigeschaften von Sub oder (weniger) Phlame dar (die Verbindung zu Phlame ist im Diagramm nicht angezeigt). Der Service wird also vom übergeordneten Service oder der übergeordneten Fabrik aufgerufen und die Module werden in das übergeordnete Objekt geschachtelt.</p>
<p>Resultat sollte ein <a title="Blogeintrag: ORM" href="http://ugamela-blog.pheelgood.net/2008/11/19/orm-object-relational-mapping-objektrelationale-abbildung/">ORM</a> Schema sein. Phlames sind Objekte mit Unterobjekten, die automatisch (ohne Serialisierung) in der Datenbank gespeichert werden. Dadurch lässt sich übrigens auch weiterhin ohne die Objekte arbeiten, vor allem MySQL intern.</p>
<p>Benötigen tue ich dieses Schema vor allem für sehr variable Kämpfe, also Objektinteraktion und einfach freiere Modellierung der Objekte selbst und ihren Beziehungen zu anderen im Spiel.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/11/22/phlame-engine-entwurf-nr-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Frameworks</title>
		<link>http://ugamela-blog.pheelgood.net/2008/11/20/php-frameworks/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/11/20/php-frameworks/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 10:00:15 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=132</guid>
		<description><![CDATA[Ich bin ja dabei ein Framework zu schreiben&#8230; oder zumindest den Teil eines Frameworks. Framework.. vor ein paar Monaten hab ich noch Gedacht damit ist der Plan oder die Vorgehensweise für ein Projekt gemeint, dem ist aber nicht so. Ein Framework ist eine Bibliothek aus Scripten, auf der man ein Projekt aufbauen kann. Dies beinhaltet [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin ja dabei ein Framework zu schreiben&#8230; oder zumindest den Teil eines Frameworks.</p>
<p>Framework.. vor ein paar Monaten hab ich noch Gedacht damit ist der Plan oder die Vorgehensweise für ein Projekt gemeint, dem ist aber nicht so. Ein Framework ist eine Bibliothek aus Scripten, auf der man ein Projekt aufbauen kann. Dies beinhaltet vor allem Grundfunktionen und geben bereits eine <a title="http://de.wikipedia.org/wiki/MVC" href="http://" target="_blank">MVC</a> Struktur vor.</p>
<p>Nun ein paar Frameworks, die ich mir angesehen habe:</p>
<p>Das <a title="Zend Framework Docu" href="http://framework.zend.com/manual/de/" target="_blank">Zend Framework</a> erschlägt mich fast mit seinem Umfang. Es führt auch sehr viele Sachen, die ich überhaupt nicht brauche. Es ist meiner Meinung nach ein Schwergewicht. Ich habe keine Tests gemacht, aber ich kann mir denken, dass das ganze trotz direkter Einbindung auf dem Server (keine PHP Scripte) nicht so performant wie ein kleines leichtgewichtiges Framework ist. Ich verwende es aus dem selben Grund nicht, wieso ich Smarty nicht verwende &#8211; ich brauche diese Schwerfälligkeit nicht, so praktisch sie auch sein kann, sondern brauche etwas Leichtgewichtiges, das gut auf meine Zwecke zugeschnitten ist.</p>
<p>Das PHP Framework <a title="Symfony Docu" href="http://www.symfony-project.org/api/1_1/">symfony</a> gefällt mir schon besser, obwohl die Dokumentation nur auf Englisch ist. Vor allem ist ORM mit Propel möglich. Nach näherem Hinsehen kann Propel zwar einiges, was ich gebrauchen könnte oder selbst gar nicht schöpfen werde/würde, doch eine sehr wichtige Eigenschaft fehlt mir: Row-Level-Locking, ein Schreibschutz auf bestimmte Tabelleneinträge, der auf InnoDB Tabellen in MySQL viel besser ist als das bekannte &#8220;LOCK TABLES&#8221; auf MyIsam Tabellen. Aus diesem Grund kann ich Propel, mit oder ohne Symfony nicht verwenden.</p>
<p>Ich falle zurück auf die Idee ein eigenes, sehr leichtgewichtiges Framework zu schreiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/11/20/php-frameworks/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ORM (object relational mapping &#8211; objektrelationale Abbildung)</title>
		<link>http://ugamela-blog.pheelgood.net/2008/11/19/orm-object-relational-mapping-objektrelationale-abbildung/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/11/19/orm-object-relational-mapping-objektrelationale-abbildung/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 10:00:13 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=135</guid>
		<description><![CDATA[ORM wird größtenteils den Kern meines Frameworks darstellen. Nur, was ist ORM? [Ich meine hier übrigens nicht Objekt Role Modeling, das auch ORM abgekürzt wird] Ich muss vorwarnen, das wird jetzt wahrscheinlich für den Großteil der Blogleser unverständlich. Es gehört wohl zu den Tiefen des Programmierens, neben den Entwurfsmuster. Oft wird hier mit Fremdwörtern nur [...]]]></description>
			<content:encoded><![CDATA[<p>ORM wird größtenteils den Kern meines Frameworks darstellen.</p>
<p>Nur, <span style="text-decoration: underline;"><strong>was ist ORM?</strong></span> [Ich meine hier übrigens nicht Objekt Role Modeling, das auch ORM abgekürzt wird]</p>
<p>Ich muss vorwarnen, das wird jetzt wahrscheinlich für den Großteil der Blogleser unverständlich. Es gehört wohl zu den Tiefen des Programmierens, neben den Entwurfsmuster. Oft wird hier mit Fremdwörtern nur so um sich geschmissen. Ich habe immernoch so meine Probleme, so lange mache ich das ja noch nicht. Ich werde mich trotzdem bemühen es einfach auszudrücken.</p>
<p>Relationale Datenbanken, wie MySQL, legen Daten in Tabellen ab. OOP arbeitet aber mit Objektinstanzen. ORM soll nun das Zwischenstück bilden, das die Objekte in der Datenbank abbildet. Ich möchte mittlerweile nurnoch mit Objekten arbeiten, es vereinfacht das Programmieren ungemein. Ich möchte vor allem Spielelemente wie Flotten als Objekte verwalten, um besser Interaktionen zu überblicken. Doch bevor man sich bei jedem Objekt mit dem Speichern in der Datenbank herumschlagen muss, möchte ich das lieber in verschiedenen (Abstraktions-)Schichten verstecken. Für die &#8220;Community-Entwickler&#8221;, die hoffentlich nach Fertigstellung des Frameworks tatkräftig mithelfen ein Spiel zustande zu bringen, bedeutet dies, dass ein Haufen Arbeit wegfällt. Dafür müssen sie sich halt mit (relativ einfachen) Klassen herumschlagen, was sie vielleicht von PHP noch nicht gewöhnt sind.</p>
<p>Ganz nebenbei wird dann übrigens gecacht und Race Conditions umschifft, ohne dass man etwas davon mitbekommt. OOP hat den großen Vorteil, dass man anderen Code nicht kennen muss, man muss nur wissen was er tut, und dafür gibt es die Dokumentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/11/19/orm-object-relational-mapping-objektrelationale-abbildung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

