Oop 如何以面向对象的方式对持续时间建模?

Oop 如何以面向对象的方式对持续时间建模?,oop,hungarian-notation,Oop,Hungarian Notation,我正在处理使用整数来建模持续时间的不同API。只是他们似乎无法就单位达成一致。有时是秒,有时是毫秒 到目前为止,我所能找到的避免错误的最好方法是使用匈牙利符号:DurationInMills、durationInSeconds等等 这让我想知道是否有更好的、真正面向对象的建模方法?允许类型系统帮助我避免错误,我错误地将持续时间(以毫秒为单位)视为持续时间(以秒为单位),反之亦然。确实存在:创建一个表示持续时间的类,并抛出两个工厂方法,以秒和毫秒为单位创建持续时间类的实例: class Durat

我正在处理使用整数来建模持续时间的不同API。只是他们似乎无法就单位达成一致。有时是秒,有时是毫秒

到目前为止,我所能找到的避免错误的最好方法是使用匈牙利符号:DurationInMills、durationInSeconds等等


这让我想知道是否有更好的、真正面向对象的建模方法?允许类型系统帮助我避免错误,我错误地将持续时间(以毫秒为单位)视为持续时间(以秒为单位),反之亦然。

确实存在:创建一个表示持续时间的类,并抛出两个工厂方法,以秒和毫秒为单位创建持续时间类的实例:

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

    public static Duration FromMilliseconds(int milliseconds)
    {
        // ...
    }        
}
这个类应该提供一个最好是只读的属性,例如毫秒,它将返回封装在特定实例中的毫秒数

此外,还可以使用Seconds属性

如果编译器允许的话,我会在这里避免任何隐式转换操作符,因为它们只会使事情复杂化


如果您在.NET上,您可以查看一下以获得灵感,也可以将其全部使用。

确实有:创建一个表示持续时间的类,并加入两个工厂方法以从秒和毫秒创建持续时间类的实例:

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

    public static Duration FromMilliseconds(int milliseconds)
    {
        // ...
    }        
}
这个类应该提供一个最好是只读的属性,例如毫秒,它将返回封装在特定实例中的毫秒数

此外,还可以使用Seconds属性

如果编译器允许的话,我会在这里避免任何隐式转换操作符,因为它们只会使事情复杂化


如果你在.NET上,你可以查看一下灵感,或者完全使用它。

只需为每个持续时间指定一个单独的类,并使用毫秒作为计算中使用的权威形式,即在两个类中都使用重载函数GetMillicles

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

class MilliSeconds : public Duration
{
...
};

class Seconds : public Duration
{
...
};
尽管您可能需要更好的粒度,但纳秒可能是更好的权威表示。无论如何,添加较低粒度的类不会是问题——例如,数小时或数天


编辑:你可能想从中获得灵感,这是一篇引人入胜的文章。

只需给每个持续时间指定一个单独的类,并使用毫秒作为计算中使用的权威形式,即,在两个类中都使用重载函数getmillizes

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

class MilliSeconds : public Duration
{
...
};

class Seconds : public Duration
{
...
};
尽管您可能需要更好的粒度,但纳秒可能是更好的权威表示。无论如何,添加较低粒度的类不会是问题——例如,数小时或数天


编辑:你可能想从中获得灵感,这是一本引人入胜的书。

在苹果的《可可》中,持续时间的类型是,并且定义为双精度:

typedef double NSTimeInterval;

它以秒为单位,在10000年内具有亚毫秒的精度。

在苹果的Cocoa中,持续时间的类型是,并且定义为双精度:

typedef double NSTimeInterval;

它是以秒为单位表示的,在10000年内精度为亚毫秒。

我在谷歌上搜索过它,但我找不到与您的匹配的值对象模式的定义。你有来源吗?我在谷歌上搜索过,但我找不到与你匹配的值对象模式的定义。你有消息来源吗?