OOP,在对象的构造函数中调用另一个对象的 getter 方法是否是一种好的做法

本文关键字:是否是 一种 方法 getter 对象 构造函数 一个对象 调用 OOP | 更新日期: 2023-09-27 18:31:51

我试图创建一个StandardMidiFile对象,它将包含一个HeaderChunk对象和TrackChunk对象。

TrackChunk对象将包含MidiEvent对象。

因此,当我创建这个StandardMidiFile对象时,我希望它的构造函数来构造和包含其他对象。

但是,当创建TrackChunk对象时,它首先需要在 GUI-UserControl 类中调用一个 getter 方法,该方法将确定所有 MidiEvents 的总长度(以字节为单位)。然后,该值将用于构造TrackChunk

构造函数中调用方法是否是良好的 OOP 实践?

OOP,在对象的构造函数中调用另一个对象的 getter 方法是否是一种好的做法

一般来说,它既不好也不坏。 在某些特定情况下,它可能是好的,也可能是坏的。 不过,找到"坏"的会有点困难;这个想法本身并没有什么错。

如果您希望根据另一个对象初始化对象,这似乎是正确的做法。例如,如果你有一个"Settings"类,那么许多新实例尝试访问其内部字段,知道如何初始化自己也是有意义的。
一般来说,这既并不总是好事,也不总是坏事;与通常在编程中一样,这取决于具体情况。

我要做的是将轨道长度作为构造函数参数传递。

class StandardMidiFile
{
    HeaderChunk header;
    TrackChunk track;
    public StandardMidiFile()
    {
        var trackLength = // call GUI-UserControl class to get value
        header = new HeaderChunk();
        track = new TrackChunk(trackLength);
    }
}
class HeaderChunk
{
    // blah blah blah
}
class TrackChunk
{
    // blah blah blah
    public TrackChunk(var trackLength)
    {
        // Do stuff here.
    }
}

当然,这实际上取决于您设计的其余部分。如果TrackChunk只是StandardMidiFile中使用的对象,那么这对我来说更有意义。我相信,无论哪种方式都是"正确的"。

仅仅因为你可以做某事,并不意味着你应该这样做。也许扩展问题,提供一个例子,这将有助于您的答案。

相关文章: