OOP,在对象的构造函数中调用另一个对象的 getter 方法是否是一种好的做法
本文关键字:是否是 一种 方法 getter 对象 构造函数 一个对象 调用 OOP | 更新日期: 2023-09-27 18:31:51
我试图创建一个StandardMidiFile
对象,它将包含一个HeaderChunk
对象和TrackChunk
对象。
TrackChunk
对象将包含MidiEvent
对象。
因此,当我创建这个StandardMidiFile
对象时,我希望它的构造函数来构造和包含其他对象。
但是,当创建TrackChunk
对象时,它首先需要在 GUI-UserControl 类中调用一个 getter 方法,该方法将确定所有 MidiEvents 的总长度(以字节为单位)。然后,该值将用于构造TrackChunk
。
构造函数中调用方法是否是良好的 OOP 实践?
一般来说,它既不好也不坏。 在某些特定情况下,它可能是好的,也可能是坏的。 不过,找到"坏"的会有点困难;这个想法本身并没有什么错。
如果您希望根据另一个对象初始化对象,这似乎是正确的做法。例如,如果你有一个"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中使用的对象,那么这对我来说更有意义。我相信,无论哪种方式都是"正确的"。
仅仅因为你可以做某事,并不意味着你应该这样做。也许扩展问题,提供一个例子,这将有助于您的答案。