<?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[DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>viele meiner Klassen erfordern bei deren Instanziierung unabhängig von dem was sie tun immer ein oder zwei immergleiche Parameter: Jeweils eine Referenz auf einen Logger und auf eine Art Anwendungskonfiguration, die z.B. grundlegende Dinge wie das verwendete Maßsystem speichert.</p>
<p>Es ist mühsehlig die immer bei jeder Instanziierung angeben zu müssen. Gibt es eine elegantere Lösung? Globale Variablen für die Konfiguration und den Logger kommen nicht in Frage.<br />
Meine beste Idee ist bis jetzt eine Art Factory-Klasse zu erstellen, die einmalig mit Referenzen auf Logger und Konfig ausgestattet wird und die mir dann die mühselige Objektkonstruktion in den Factory-Methoden abnimmt.<br />
Allerdings ergeben sich hierraus dann andere Probleme. Ich würde gar nicht soviel sparen. Anstatt:</p>
<pre><code>Foo *pFoo = new Foo(&amp;logger, &amp;config);
</code></pre>
<p>würde man dann</p>
<pre><code>Foo *pFoo = pFactory-&gt;CreateFoo();
</code></pre>
<p>schreiben. Man schleppt also anstatt 2 Referenzen nur noch eine umher und verbaut sich obendrein die Möglichkeit Objekte von Foo auf dem Stack anzulegen. Ausserdem würde die Factory-Klasse wird ziemlich aufgebläht (sie kennt alle Klassen die nichts miteinander zu tun haben, ausser dass sie die beiden Parameter erfordern). Aus diesen Gründen fällt die Factory-Idee eigentlich auch schon raus.<br />
Andererseits will ich um einen Übergabeparamter zu sparen den &quot;Logger&quot; auch nicht in &quot;Config&quot; integrieren, denn es gibt mehrere Logfiles.</p>
<p>Fällt jemandem von euch noch was schlaues ein, oder sollte ich in den sauren Apfel beissen und die beiden Parameter eben übergeben?</p>
<p>vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314037/designpattern-übergabe-von-oft-immergleichen-parametern-an-einen-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 20:57:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314037.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Feb 2013 13:28:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Mon, 18 Feb 2013 13:28:45 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>viele meiner Klassen erfordern bei deren Instanziierung unabhängig von dem was sie tun immer ein oder zwei immergleiche Parameter: Jeweils eine Referenz auf einen Logger und auf eine Art Anwendungskonfiguration, die z.B. grundlegende Dinge wie das verwendete Maßsystem speichert.</p>
<p>Es ist mühsehlig die immer bei jeder Instanziierung angeben zu müssen. Gibt es eine elegantere Lösung? Globale Variablen für die Konfiguration und den Logger kommen nicht in Frage.<br />
Meine beste Idee ist bis jetzt eine Art Factory-Klasse zu erstellen, die einmalig mit Referenzen auf Logger und Konfig ausgestattet wird und die mir dann die mühselige Objektkonstruktion in den Factory-Methoden abnimmt.<br />
Allerdings ergeben sich hierraus dann andere Probleme. Ich würde gar nicht soviel sparen. Anstatt:</p>
<pre><code>Foo *pFoo = new Foo(&amp;logger, &amp;config);
</code></pre>
<p>würde man dann</p>
<pre><code>Foo *pFoo = pFactory-&gt;CreateFoo();
</code></pre>
<p>schreiben. Man schleppt also anstatt 2 Referenzen nur noch eine umher und verbaut sich obendrein die Möglichkeit Objekte von Foo auf dem Stack anzulegen. Ausserdem würde die Factory-Klasse wird ziemlich aufgebläht (sie kennt alle Klassen die nichts miteinander zu tun haben, ausser dass sie die beiden Parameter erfordern). Aus diesen Gründen fällt die Factory-Idee eigentlich auch schon raus.<br />
Andererseits will ich um einen Übergabeparamter zu sparen den &quot;Logger&quot; auch nicht in &quot;Config&quot; integrieren, denn es gibt mehrere Logfiles.</p>
<p>Fällt jemandem von euch noch was schlaues ein, oder sollte ich in den sauren Apfel beissen und die beiden Parameter eben übergeben?</p>
<p>vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299705</guid><dc:creator><![CDATA[TonyDinoso]]></dc:creator><pubDate>Mon, 18 Feb 2013 13:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Mon, 18 Feb 2013 13:58:15 GMT]]></title><description><![CDATA[<p>Evtl. wäre &quot;Prototype&quot; das richtige für dich. Das wäre eine etwas allgemeinere Version von deiner &quot;Factory&quot;-Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299711</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 18 Feb 2013 13:58:15 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Mon, 18 Feb 2013 14:48:15 GMT]]></title><description><![CDATA[<p>TonyDinoso schrieb:</p>
<blockquote>
<p>Andererseits will ich um einen Übergabeparamter zu sparen den &quot;Logger&quot; auch nicht in &quot;Config&quot; integrieren, denn es gibt mehrere Logfiles.</p>
</blockquote>
<p>Wenn die Klassen selbst wissen welchen Logger sie brauchen, dann kannst du ja auch alle Logger mit in das Config Objekt reinpacken. Und die Klasse nimmt sich dann einfach denjenigen den sie verwenden mag.</p>
<blockquote>
<p>Fällt jemandem von euch noch was schlaues ein, oder sollte ich in den sauren Apfel beissen und die beiden Parameter eben übergeben?</p>
</blockquote>
<p>Ich würde vermutlich einfach die beiden Parameter übergeben.<br />
Maximal könntest du noch gucken ob du die Sache mit dem Logger irgendwie vereinfachen kannst (threadlocal statics oder sowas).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299712</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 18 Feb 2013 14:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Mon, 18 Feb 2013 19:46:22 GMT]]></title><description><![CDATA[<p>Ich habe ein ähnliches &quot;Phänomen&quot;, das passiert halt eben wenn man Dependency Injection statt Singletons o.ä. verwendet. Dennoch halte ich es für die bessere Lösung.</p>
<p>Factory ist oft so ein Monster-Pattern, das viel aufbläht. Das muss man gut rechtfertigen, sehe ich an dieser Stelle aber nicht ausreichend gerechtfertigt.</p>
<p>Wo genau siehst Du denn die Arbeit bei den Parameterübergaben? Das ist ja erstmal nicht viel Aufwand. Blöd ist nur, dass bei tiefen Verschachtelungen von Klassen, du immer etwas mitschleppen musst. Und vergisst Du es Mal, erhält man keinen eindeutigen Fehler, das wundert einen dann jedes Mal wieder, bis man merkt, dass man wieder die Übergabe vergessen hat.</p>
<p>Du könntest höchstens aus beiden Parametern einen machen, indem Du eine Art Initializer-struct erstellst. Wenn Dir später dann auffällt, dass Du etwas Drittes derart benötigst, könntest Du es dann einfach dazupacken. Nachteil ist wieder etwas mehr Gewusel, wenn Du den Logger dann nutzen wollen würdest.</p>
<p>Also alles in allem würde ich es einfach übergeben, mir fällt keine bessere Lösung ein. <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/2299795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299795</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Feb 2013 19:46:22 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Tue, 19 Feb 2013 20:41:05 GMT]]></title><description><![CDATA[<p>TonyDinoso schrieb:</p>
<blockquote>
<pre><code>Foo *pFoo = new Foo(&amp;logger, &amp;config);
</code></pre>
</blockquote>
<p>Unter der Annahme, dass alle deine Klassen von einer Basis-Klasse &quot;LoggerConfig&quot; abgeleitet sind...</p>
<p>Könnte man den operator() überladen.<br />
Das könnte dann (absolut ungetestet grade) etwa so aussehen:</p>
<pre><code>Foo *pFoo = new Foo()(&amp;logger, &amp;config);
</code></pre>
<p>Alternativ könnte man auch via CRTP was zaubern, ohne mich zu weit aus dem Fenster zu lehnen<br />
und wieder absolut ungetestet</p>
<pre><code>// Hier passiert dann implizite Konvertierung
Foo *pFoo = new magic&lt;Foo, &amp;logger, &amp;config&gt;()
// Die eigentliche Template-Klasse ist irrelevant.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2300083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300083</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Tue, 19 Feb 2013 20:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Tue, 19 Feb 2013 20:51:05 GMT]]></title><description><![CDATA[<p>Wenns nur un Mitarbeit geht...</p>
<pre><code>#define CREATE_A new A (b, c)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2300086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300086</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 19 Feb 2013 20:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Tue, 19 Feb 2013 20:51:46 GMT]]></title><description><![CDATA[<p>Oder gleich</p>
<pre><code>#define LOCO ,&amp;logger,&amp;config
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2300087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300087</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 19 Feb 2013 20:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Thu, 12 Jun 2014 10:34:39 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300090</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 12 Jun 2014 10:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Tue, 19 Feb 2013 21:09:33 GMT]]></title><description><![CDATA[<p>Ich falle immer mehr der Idee anheim, dass man ab einem gewissen Softwareumfang mit gegebener Strukturierung und Modularisierung entweder genannte Tricks anwenden kann und mit der Zeit immer ekligerer Code mit Templates und Makros entsteht, oder aber vielleicht besser damit fährt, sich Wizards und Snippets für die Entwicklungsumgebung der Wahl zu programmieren. Letzteres wollte ich in nächster Zeit mal angehen. Aber ich bin nun auch an einem Projekt am werkeln, bei dem man davon wohl schon &quot;by design&quot; am meisten hat, bei &quot;euren&quot; Projekten mag das anders aussehen.</p>
<p>Edit: Vielleicht um den Kontext mal überhaupt zu erwähnen. Ich habe an mir das Syndrom festgestellt, dass ich nach gegebener klarer Schnittstellendefinition viel Mühe in abstruseste Template-Basisklassen-Konstrukte usw. gesteckt habe, die zwar alles, was ich zu dem Zeitpunkt gemacht habe zu Einzeilern werden lässt und erst einmal das große ganze klarer machten, aber ein Jahr später weiß ich überhaupt gar nicht mehr, warum dort wo und warum irgendwelche Limitationen sind, die die Schnittstellendefinition so erstmal gar nicht nahelegt. Ich nenne es liebevoll das &quot;Basisklassenfriemelsyndrom&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300092</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 19 Feb 2013 21:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Wed, 20 Feb 2013 00:16:55 GMT]]></title><description><![CDATA[<p><a href="http://dict.leo.org/esde?lp=esde&amp;lang=de&amp;searchLoc=0&amp;cmpType=relaxed&amp;sectHdr=on&amp;spellToler=&amp;search=loco" rel="nofollow">LOCO?</a><br />
Für nurfs Vorschläge könnte ich BAKA (BAsisKlasse für Argumente) als Name anbieten. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
(EDIT: Nix gegen dich, nurf, passt nur grad so schön ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300114</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Feb 2013 00:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to DesignPattern: Übergabe von oft immergleichen Parametern an einen Konstruktor on Thu, 12 Jun 2014 10:34:43 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300123</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 12 Jun 2014 10:34:43 GMT</pubDate></item></channel></rss>