Frage

Ich bin der Umgang mit verschiedenen APIs, die ganzen Zahlen Modell Dauer verwenden. Nur sie können nicht auf die Einheiten zu einigen scheinen. Manchmal ist es Sekunden und manchmal ist es Millisekunden.

Bisher ist der beste Weg, um Fehler zu vermeiden Ich habe in der Lage zu finden, die zu verwenden ist ungarische Notation. DurationInMillis, durationInSeconds und so weiter

Es macht mich fragen, ob es nicht ein besserer, wirklich OO Weg Dauer der Modellierung? Etwas, das der Art System zu Hilfe ermöglichen würde mir Fehler zu vermeiden, wo ich versehentlich eine Dauer in Millisekunden behandeln, als eine Dauer kehren Sekunden und umge ist.

War es hilfreich?

Lösung

Gib jedem Dauer eine eigene Klasse und Verwendung Millisekunden als maßgebliche Form in Berechnungen verwendet - d. H, Überlastfunktion getMilliSeconds() in beiden Klassen

class Duration
{
...
    virtual const unsigned long long getMilliSeconds() const;
...
}

class MilliSeconds : public Duration
{
...
};

class Seconds : public Duration
{
...
};

Allthough könnten Sie besser Granularität wollen, so Nanosekunden könnte eine bessere autoritative Darstellung sein. Wie auch immer, wird das Hinzufügen Klassen niedrigerer Granularität kein Problem sein - zum Beispiel, Stunden oder Tagen.

Bearbeiten Sie könnten a href aussehen soll bei <= "http://www.boost.org/doc/libs/1_42_0/doc/html/date_time.html" rel =“ nofollow noreferrer "> boost :: date_time für Inspiration, es ist eine faszinierende Lektüre.

Andere Tipps

Sicher gibt es: eine Klasse erstellen, die Dauer darstellen und in ein paar Fabrikmethoden werfen eine Instanz Duration Klasse von Sekunden und Millisekunden zu erstellen:

class Duration
{
    public static Duration FromSeconds(int seconds)
    {
        // ...
    }

    public static Duration FromMilliseconds(int milliseconds)
    {
        // ...
    }        
}

Diese Klasse sollte einzelne (vorzugsweise schreibgeschützt) Eigenschaft bieten -. B. Milliseconds, die eine Anzahl von Millisekunden, eingekapselt in einer bestimmten Instanz zurück

Darüber hinaus können Sie Seconds Eigenschaft haben.

Ich würde vermeiden keine implizite Konvertierung Betreiber hier (wenn Ihr Compiler für sie erlaubt), da sie nur Erschwerend kommt hier.

Sie können einen Blick auf TimeSpan für Inspiration (oder ganz verwenden, wenn Sie auf .NET sind).

In Apples Cocoa, der Typ für Dauern ist NSTimeInterval und ist als Doppel definiert:

typedef double NSTimeInterval;

Es wird in Sekunden ausgedrückt und hat eine Untermillisekunde Präzision über 10.000 Jahre.

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