Frage

Ich habe eine Reihe von 60 Funktionen zu implementieren, gemäß den vordefinierten Signaturen. Sie müssen globale Funktionen sein, und nicht irgendein Mitglied der Klasse von Funktionen. Als ich sie implementieren, verwende ich eine Reihe von schön gemacht Klassen von 3rd-Party zur Verfügung gestellt.

Meine Umsetzung der meisten Funktionen ist ziemlich kurz, etwa 5-10 Zeilen, und befasst sich hauptsächlich mit verschiedenen Zugriffen auf, dass 3rd-Party-Klassen. Für einige kompliziertere Funktionen habe ich ein paar neue Klassen, die mit all den komplizierten Sachen beschäftigen, und ich verwende sie auch in den Funktionen. Alle Zustandsinformationen werden in den statischen Mitglieder meiner und dritten Partei Klassen gespeichert, so dass ich nicht über globale Variablen erstellen.

Frage: Wäre es besser, wenn ich mit 60 Mitgliedsfunktionen einer großen Klasse implementieren, und alles tun, die Umsetzung (das ist jetzt in den globalen Funktionen) da? Und jede der Funktionen, die ich anrufen zu schreiben habe nur auf die entsprechende Elementfunktion in der Klasse.

War es hilfreich?

Lösung

  

Alle Zustandsinformationen werden in den statischen Mitgliedern meiner und dritter Partei Klassen gespeichert, so dass ich muß nicht globale Variablen erstellen.

Das ist der Schlüsselpunkt. Nein, sie sollten auf jeden Fall nicht setzen in Klassen werden. Die Klassen sind gemacht für die Erstellung von Objekten verwendet werden soll. In Ihrer Situation würde man sie nur als Rahmen, für die Daten und Funktionen verwenden. Aber das ist, was Namespaces bereits lösen besser:

namespace stuff {
    ... 60 functions ...
    namespace baz {
        ... if you want, you can have nested namespaces, to ...
        ... categorize the functions ...
    }

    namespace data {
        ... you can put data into an extra namespace if you want ...
    }
}

Klassen erstellen, die rein nur aus statischen Mitgliedern bestehen ist eine schlechte Idee.

Andere Tipps

Haben die Benutzer Ihres Codes wirklich diese große Klasse brauchen?

Wenn ja, setzt es.

Wenn nein, nicht Ihre Zeit an der Umsetzung und nicht die Zeit anderen Abfall beauftragt, es zu testen oder zu versuchen, zu verstehen, was ist die genaue Rolle dieser Klasse über den OOP-Look.

litb ist wahrscheinlich richtig. Der einzige Grund, dass Sie sogar ein class Umwickeln einer Reihe von kostenlosen Funktionen in Betracht ziehen würden, wenn Sie einige Ihrer eigenen Daten für die Verwendung in Ihrem Wrapper befestigen müssen. Das einzige, was mir in den Sinn kommt, wenn ein Handle in eine Protokolldatei oder etwas ähnliches in den Umhüllungen müssen.

über einen entsprechenden Hinweis, im Kampf gegen die Versuchung von using namespace stuff;! beziehen sich immer auf die Funktionen Namespace Qualifikation mit:

#include <stuff.h>
void some_function() {
    stuff::function_wrapper();
}

statt:

#include <stuff.h>
using namespace stuff;
void some_function() {
    function_wrapper();
}

Der Vorteil ist, dass, wenn Sie jemals die namespace zu einer Klasse voller static Methoden konvertieren müssen, können Sie es leicht tun können.

Ich denke, die „eine Klasse eine Verantwortung“ Regel, die Sie hier führen sollte. Die 60 Funktionen können wahrscheinlich in unterschiedliche Verantwortlichkeiten aufgeteilt werden, und jeder von denen, verdient eine Klasse. Dies wird auch eine OO-Schnittstelle zu Kunden der API geben, die nicht durch die Notwendigkeit der globalen Funktionen eingeschränkt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top