<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Gottklasse, na und?]]></title><description><![CDATA[<p>Hi,</p>
<p>Mein heutiges Problem beschäftigt sich mit einer Gottklasse bzw. noch weiteren Unschönheiten meiner Klasse.</p>
<p>Wie immer bin ich in der 3D-Programmierung unterwegs. Hier gibt es eine Klasse Model. Nun ist diese einfach Mal ein Riesenbatzen von Teilen:<br />
- Vertices<br />
- Indices<br />
- Normalenvektoren<br />
- Farben<br />
- Texturkoordinaten<br />
- Animationen<br />
- Nodes (Hierarchie von Teilen des Models)<br />
- Bones (für Animationen)<br />
- Boundingboxen/Spheres für Kollisionsabfragen<br />
- viele weitere Eigenschaften werden künftig kommen für Bummaps/Normalmaps und weiß der Geier</p>
<p><strong>Problem 1</strong><br />
Ich muss ehrlich gestehen, dass ich das direkte Problem der Gottklasse nicht sehe. Gut, das zählt als Antipattern, wir haben hier einen Riesenhaufen an Methoden und Attributen, typedefs natürlich auch wegen der Zahlreichen vector/map-Attribute welche irgendwelche Koordinaten aggregieren.</p>
<p>Es gibt die Möglichkeit, dass ich ein paar der Attribute zusammenfasse und daraus wiederum ein Objekt baue. Ich muss aber dazu sagen, dass das sehr künstlich wäre. Außerdem vergrößert sich dadurch mein Zugriffspfad auf einzelne Elemente.<br />
Zur Zeit habe ich einige der Teile fast schon willkürlich in eine so genannte Mesh-Klasse ausgelagert, die einst nur für das statische Rendern des Objektes gedacht war. Bei einer Animation werden aber wiederum die anderen Objekte benötigt etc., sodass ich an das Mesh alles einmal durchreichen darf. Da habe ich außer einer scheinbaren Übersichtlichkeit nichts gewonnen.</p>
<p><strong>Problem 2</strong><br />
Eine andere Sache, welche die Klasse aufbläht, und mich irgendwie stört:<br />
Das Model kann durch mehrere verschiedene Loader aufgebaut werden. Angedacht sind mindestens zwei Loader für verschiedene Formate. Jetzt braucht die Loaderklasse Zugriff auf die Modelklasse. Also habe ich in dieser einen Haufen Getter spendiert, welche nicht-konstante Referenzen zurückliefern auf alle maps und vectors. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> friend hat den Nachteil, das für jeden neuen Modelloader mein Model geändert werden muss...</p>
<p>Hm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Was haltet ihr von folgender Idee: Alle ModelLoader erben von einer Basisklasse, Model ist mit dieser befreundet und die Basisklasse hat die entsprechenden Referenzgetter der Form:</p>
<pre><code class="language-cpp">protected: Model::VertexMap&amp; GetVertexMap() {return model_-&gt;vertexMap_;}
</code></pre>
<p>Damit würden nur Loader Zugriff auf das Ding kriegen, gefällt mir irgendwie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><strong>Problem 3</strong><br />
Falls die anderen beiden Punkte nicht schon genug Zeit in Anspruch nehmen, habe ich hier noch ein Randproblem, das man eigentlich auch in einen anderen Thread auslagern könnte (wieso findet man hier im Forum eigentlich so selten Designfragen, wie ich sie habe. Ich hab manchmal das Gefühl einfach ein Brett vor dem Kopf zu haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />).</p>
<p>Und zwar macht es keinen Sinn, dass man eine ModelLoader-Klasse (also ein Derivat, aber ich spreche jetzt Mal nur von ModelLoader-Klasse) mehrfach instanziiert. Es gibt auch kein Attribut bis auf das neu erstellte Model während des Ladeprozesses, da ich diverse Funktionen zum Beladen der Einzelteile habe.</p>
<p>Also ist das eigentlich keine Klasse, oder? Wir sind ja hier nicht in Java. Singleton-Pattern geht, aber das nützt ja eigentlich auch nichts. Zur Zeit mache ich eine ModelLoader-Instanz, wenn ich sie brauche.</p>
<p>Die Alternative wären freie Methoden in einem Namespace, aber ist das so toll? Vielleicht ist die Klassendefinition (eines Derivats) hilfreich:</p>
<pre><code class="language-cpp">namespace Engine
{
	class DLL_SPECIFIER AssimpModelLoader : public ModelLoader
	{
	private:
		typedef const aiScene*	aiScenePtr;
// Assimp ist eine 3D-Bibliothek zum Laden;
// Diese Klasse dient damit als eine Art Wrapper, Middleware-class, welche
// die Assimp-Daten in die Struktur meiner Anwendung bringt
	private:
		// Assimp Importer
		static Assimp::Importer		importer_;
		// Temporary AI Scene
		aiScenePtr					temporaryScene_;
		unsigned int				numberOfVertices_;
		Model*						newModel_;

	private:
		void	getNumberOfVertices();
		void	extractMaterials				(const std::string&amp; filename);
		void	integrateVertices				();
		void	integrateIndices				();
		void	integrateTextureCoordinates		();
		void	integrateNormals				();
		void	integrateColors					();
		void	integrateTangents				();
		void	integrateNodes					();
		void	integrateBones					();
		void	integrateBoneIndicesAndWeights	();
		void	integrateAnimations				();

		void	integrateSubNodes			(ModelNode&amp; modelNode, const aiNode&amp; aiNode);

		UsualVector		ConvertVector(const aiVector3D&amp; vector);
		UsualMatrix		ConvertMatrix(const aiMatrix4x4&amp; matrix);
		UsualQuaternion	ConvertQuaternion(const aiQuaternion&amp; quaternion);

	public:
		virtual Model* LoadModel(const std::string&amp; filename);

		AssimpModelLoader();
	};
}
</code></pre>
<p>Und LoadModel ruft die privaten Methoden alle auf. Die Kapselung hätte ich mit globalen Methoden natürlich nicht, rechtfertigt das eine Klasse schon? Trotzdem fühle ich mich irgendwie nicht ganz wohl dabei.</p>
<p>Sooo, langer Post, tut mir Leid. Ich hoffe, die Probleme sind klar geworden und ich freue mich wie immer auf kritische Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Vielen Dank im Voraus!</p>
<p>Viele Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281548/gottklasse-na-und</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 14:58:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281548.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Feb 2011 18:54:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gottklasse, na und? on Thu, 03 Feb 2011 18:58:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Mein heutiges Problem beschäftigt sich mit einer Gottklasse bzw. noch weiteren Unschönheiten meiner Klasse.</p>
<p>Wie immer bin ich in der 3D-Programmierung unterwegs. Hier gibt es eine Klasse Model. Nun ist diese einfach Mal ein Riesenbatzen von Teilen:<br />
- Vertices<br />
- Indices<br />
- Normalenvektoren<br />
- Farben<br />
- Texturkoordinaten<br />
- Animationen<br />
- Nodes (Hierarchie von Teilen des Models)<br />
- Bones (für Animationen)<br />
- Boundingboxen/Spheres für Kollisionsabfragen<br />
- viele weitere Eigenschaften werden künftig kommen für Bummaps/Normalmaps und weiß der Geier</p>
<p><strong>Problem 1</strong><br />
Ich muss ehrlich gestehen, dass ich das direkte Problem der Gottklasse nicht sehe. Gut, das zählt als Antipattern, wir haben hier einen Riesenhaufen an Methoden und Attributen, typedefs natürlich auch wegen der Zahlreichen vector/map-Attribute welche irgendwelche Koordinaten aggregieren.</p>
<p>Es gibt die Möglichkeit, dass ich ein paar der Attribute zusammenfasse und daraus wiederum ein Objekt baue. Ich muss aber dazu sagen, dass das sehr künstlich wäre. Außerdem vergrößert sich dadurch mein Zugriffspfad auf einzelne Elemente.<br />
Zur Zeit habe ich einige der Teile fast schon willkürlich in eine so genannte Mesh-Klasse ausgelagert, die einst nur für das statische Rendern des Objektes gedacht war. Bei einer Animation werden aber wiederum die anderen Objekte benötigt etc., sodass ich an das Mesh alles einmal durchreichen darf. Da habe ich außer einer scheinbaren Übersichtlichkeit nichts gewonnen.</p>
<p><strong>Problem 2</strong><br />
Eine andere Sache, welche die Klasse aufbläht, und mich irgendwie stört:<br />
Das Model kann durch mehrere verschiedene Loader aufgebaut werden. Angedacht sind mindestens zwei Loader für verschiedene Formate. Jetzt braucht die Loaderklasse Zugriff auf die Modelklasse. Also habe ich in dieser einen Haufen Getter spendiert, welche nicht-konstante Referenzen zurückliefern auf alle maps und vectors. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> friend hat den Nachteil, das für jeden neuen Modelloader mein Model geändert werden muss...</p>
<p>Hm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Was haltet ihr von folgender Idee: Alle ModelLoader erben von einer Basisklasse, Model ist mit dieser befreundet und die Basisklasse hat die entsprechenden Referenzgetter der Form:</p>
<pre><code class="language-cpp">protected: Model::VertexMap&amp; GetVertexMap() {return model_-&gt;vertexMap_;}
</code></pre>
<p>Damit würden nur Loader Zugriff auf das Ding kriegen, gefällt mir irgendwie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><strong>Problem 3</strong><br />
Falls die anderen beiden Punkte nicht schon genug Zeit in Anspruch nehmen, habe ich hier noch ein Randproblem, das man eigentlich auch in einen anderen Thread auslagern könnte (wieso findet man hier im Forum eigentlich so selten Designfragen, wie ich sie habe. Ich hab manchmal das Gefühl einfach ein Brett vor dem Kopf zu haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />).</p>
<p>Und zwar macht es keinen Sinn, dass man eine ModelLoader-Klasse (also ein Derivat, aber ich spreche jetzt Mal nur von ModelLoader-Klasse) mehrfach instanziiert. Es gibt auch kein Attribut bis auf das neu erstellte Model während des Ladeprozesses, da ich diverse Funktionen zum Beladen der Einzelteile habe.</p>
<p>Also ist das eigentlich keine Klasse, oder? Wir sind ja hier nicht in Java. Singleton-Pattern geht, aber das nützt ja eigentlich auch nichts. Zur Zeit mache ich eine ModelLoader-Instanz, wenn ich sie brauche.</p>
<p>Die Alternative wären freie Methoden in einem Namespace, aber ist das so toll? Vielleicht ist die Klassendefinition (eines Derivats) hilfreich:</p>
<pre><code class="language-cpp">namespace Engine
{
	class DLL_SPECIFIER AssimpModelLoader : public ModelLoader
	{
	private:
		typedef const aiScene*	aiScenePtr;
// Assimp ist eine 3D-Bibliothek zum Laden;
// Diese Klasse dient damit als eine Art Wrapper, Middleware-class, welche
// die Assimp-Daten in die Struktur meiner Anwendung bringt
	private:
		// Assimp Importer
		static Assimp::Importer		importer_;
		// Temporary AI Scene
		aiScenePtr					temporaryScene_;
		unsigned int				numberOfVertices_;
		Model*						newModel_;

	private:
		void	getNumberOfVertices();
		void	extractMaterials				(const std::string&amp; filename);
		void	integrateVertices				();
		void	integrateIndices				();
		void	integrateTextureCoordinates		();
		void	integrateNormals				();
		void	integrateColors					();
		void	integrateTangents				();
		void	integrateNodes					();
		void	integrateBones					();
		void	integrateBoneIndicesAndWeights	();
		void	integrateAnimations				();

		void	integrateSubNodes			(ModelNode&amp; modelNode, const aiNode&amp; aiNode);

		UsualVector		ConvertVector(const aiVector3D&amp; vector);
		UsualMatrix		ConvertMatrix(const aiMatrix4x4&amp; matrix);
		UsualQuaternion	ConvertQuaternion(const aiQuaternion&amp; quaternion);

	public:
		virtual Model* LoadModel(const std::string&amp; filename);

		AssimpModelLoader();
	};
}
</code></pre>
<p>Und LoadModel ruft die privaten Methoden alle auf. Die Kapselung hätte ich mit globalen Methoden natürlich nicht, rechtfertigt das eine Klasse schon? Trotzdem fühle ich mich irgendwie nicht ganz wohl dabei.</p>
<p>Sooo, langer Post, tut mir Leid. Ich hoffe, die Probleme sind klar geworden und ich freue mich wie immer auf kritische Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Vielen Dank im Voraus!</p>
<p>Viele Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016219</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 03 Feb 2011 18:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Thu, 03 Feb 2011 21:48:08 GMT]]></title><description><![CDATA[<ol>
<li>Wenn alle Loader sowieso Referenzen auf die Interna der Klasse erhalten, dann machen getter/setter keinen Sinn.</li>
<li>Freunde werden nicht vererbt.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2016325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016325</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 03 Feb 2011 21:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Thu, 03 Feb 2011 23:50:01 GMT]]></title><description><![CDATA[<p>Tut mir Leid, ich möchte nicht undankbar erscheinen, aber irgendwie kann ich darauf nicht viel mehr sagen, als dass ich nicht das Gefühl hab, als hättest du meinen Text richtig gelesen.</p>
<p>Wenn etwas nicht unklar beschrieben ist, nehm ich die Kritik gern entgegen. Bei 2 meinte ich übrigens folgende Idee:</p>
<pre><code class="language-cpp">class Y;

class X
{
private:
	int value;

	friend class Y;

public:
	X(int v) :value(v){}
};

class Y
{
protected:
	int GetX(X x) {return x.value;}
};

class Z : public Y
{
public:
	void test(X x)
	{
		std::cout &lt;&lt; GetX(x);
	}
};
</code></pre>
<p>Z muss nicht Freund von X sein, daher braucht die Freundschaft auch nicht vererbt zu werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016346</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 03 Feb 2011 23:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 01:26:09 GMT]]></title><description><![CDATA[<p>edit: hier stand käse, hätte problem 3 auch lesen sollen :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016357</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 04 Feb 2011 01:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 01:34:39 GMT]]></title><description><![CDATA[<p>zu Problem 3:</p>
<p>Wenn es keinen Grund gibt im Interface eine Klasse zu verwenden, dann mach eine freie Funktion draus.<br />
Das heisst aber nicht dass es in der Implementierung nicht eine Klasse geben kann. Stichwort Method-Object.<br />
D.h. du lässt deine Klasse im Prinzip so wie sie ist, und definierst eine Funktion ala</p>
<pre><code class="language-cpp">Model* LoadModel(const std::string&amp; filename)
{
    Detail::ModelLoader loader;
    return loader.LoadModel(filename);
}
</code></pre>
<p>Die ModelLoader Klasse kann dabei entweder in einem Detail-Namespace definiert sein, oder in einem anonymen Namespace direkt im .cpp File, oder überhaupt gleich direkt lokal in der LoadModel-Funktion (ist mir persönlich bei grösseren Klassen aber zu unübersichtlich).</p>
<p>D.h. im (public) Interface gibt es diese Klasse nicht. Ebensowenig sind die diversen Hilfsfunktionen extractMaterials, integrateVertices etc. öffentlich zugänglich.</p>
<p>zu Problem 2:<br />
Naja... da gibt es viele Möglichkeiten, die alle Sinn machen können, je nachdem was man will/braucht.</p>
<p>1: Du verpasst der Model Klasse die nötigen Mutator-Funktionen, und arbeitest mit <code>const</code> . D.h. überall wo das Model nur mehr rumgereicht werden soll, aber nicht modifiziert, arbeitest du nur mit <code>Model const</code> Zeigern/Referenzen.</p>
<p>2: Du verpasst der Model Klasse einen oder mehrere Konstruktoren, an die du sämtliche benötigten Daten übergibst. Das Model ist als nach dem der Constructor fertig gelaufen ist vollständig erstellt, und lässt sich danach nicht mehr modifizieren. Sämtliche Methodon von Model sind <code>const</code> .</p>
<p>3: Du baust eine ModelBuilder Klasse ala StringBuilder in Java. Die ModelBuilder kann dabei z.B. friend von Model sein, und jeder der ein Model erstellen will verwendet die Builder-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016359</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 04 Feb 2011 01:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 08:27:30 GMT]]></title><description><![CDATA[<ol start="3">
<li></li>
</ol>
<p>Okay. Aber auf den Detail-Namespace könnte doch jetzt ohne weiteres auch jemand anderes zugreifen, oder? Ein anonymer namespace in einer cpp-File würde bedeuten, dass ich dort wie in Java direkt Klassendefinition und -implementierung zusammenschmeiße? Ich hab ganz gerne die Übersicht eine Stufe darüber...</p>
<p>Die globale Zugriffsmethode gefällt mir intuitiv sehr gut. Aber letztlich sorgt das ja nur dafür, dass der Aufrufer keine zusätzliche Instanz erstellen muss. Wo liegt da denn genau der Vorteil?</p>
<ol start="2">
<li></li>
</ol>
<p>3 ist ja so ähnlich wie bei meiner Idee, nur dass ich in meiner Variante über Vererbung gelaufen wäre, was sich aber anbietet, da die Klasse ja sowieso besteht. Und über die protected Methoden der Basisklasse kommt die abgeleitete Klasse halt an die Referenzen. Hat das irgendwelche Nachteile?</p>
<p>Der dicke ctor sorgt halt für das gleiche Problem, was ich bei 1 habe -&gt; Gottklasse. Dafür noch irgend eine Idee? Oder ist es in Ordnung, das bei dieser Struktur (die nebenbei bemerkt auch performancekritisch ist), so zu belassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016396</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 04 Feb 2011 08:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 08:37:21 GMT]]></title><description><![CDATA[<p>Du weisst ja schon, dass eine Gottklasse als Anti-Pattern gilt. Auf den Seiten, welche das sagen, steht nicht nur, <em>dass</em> es ein Antipattern ist, sondern auch <em>warum</em> es eines ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016401</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 04 Feb 2011 08:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 09:03:38 GMT]]></title><description><![CDATA[<p>Ja, aber die gehen mir nicht genug in die Tiefe:<br />
- Wiederverwendbarkeit<br />
=&gt; inwiefern? Alle Unterobjekte, die ich erzeugen würde, würden trotzdem nur durch &quot;Model&quot; genutzt werden, die machen alleine wenig Sinn</p>
<p>- wenn man die Klasse in Unterklassen gliedert, lässt sich das System besser ändern/erweitern<br />
=&gt; finde ich wieder schwierig... ich habe nun Mal ständig 1 : 1 von Model zu den Unterklassen, die ich dann hätte. Zählt das dann noch?</p>
<p>Überhaupt stört mich etwas, dass ich hier eine große Klasse in Unterklassen auslagern würde, wobei halt immer alles 1:1 ist und auch 1:1 bleibt, ergibt das dann überhaupt Sinn?</p>
<p>- Abhängigkeiten; alle nutzen Model, alle lieben Model... Model, Model, Model<br />
=&gt; Unterklassen wären sowieso nur innerhalb des Models instanziiert, also müsste man die Unterklassen auch über diese Klasse ansteuern</p>
<p>Hab ich was vergessen? Ich finde gerade nicht wirklich besseres Material.</p>
<p>Dann frage ich mich allerdings, ob meine Klasse überhaupt eine Gottklasse ist, nur weil sie viele Methoden und Attribute hat. Single Responsibility habe ich hier eigentlich dennoch...</p>
<p>Darum sage ich ja, ich bin nicht so sicher, ob das ein Problem ist. Es sieht bisher nur &quot;nicht schön aus&quot;, aber wenn ich am Ende merke, dass alles zusammenfällt, denke ich mir &quot;hätte ich das Mal vorher gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016416</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 04 Feb 2011 09:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 15:46:28 GMT]]></title><description><![CDATA[<p>Keiner ne Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016592</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 04 Feb 2011 15:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Fri, 04 Feb 2011 15:59:59 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Keiner ne Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Du redest immer nur vom jetzt. Warum bist du so sicher, dass du die Teile der Funktionalität niemals für etwas anderes brauchen wirst? Woher weißt du, dass du nie Erweiterungen/Änderungen an Teilen vornehmen wirst?</p>
<p>Wenn du diese Fragen wirklich zufriedenstellend beantworten kannst, dann bleib dabei. Aber die Erfahrung der ganzen Welt steht dir entgegen, dass dies nicht der Fall sein wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016600</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 04 Feb 2011 15:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Gottklasse, na und? on Sat, 05 Feb 2011 04:43:33 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Keiner ne Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>schau dir andere Loaderframeworks und Graphicengines an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016870</guid><dc:creator><![CDATA[doch]]></dc:creator><pubDate>Sat, 05 Feb 2011 04:43:33 GMT</pubDate></item></channel></rss>