-1

オブジェクトを作成しようとしていますが、オブジェクトとオブジェクトStandardMidiFileが含まれます。HeaderChunkTrackChunk

オブジェクトにはTrackChunkオブジェクトが含まれMidiEventます。

したがって、このStandardMidiFileオブジェクトを作成するときは、コンストラクターで他のオブジェクトを構築して含める必要があります。

ただし、TrackChunk オブジェクトが作成されると、最初に、すべての MidiEvent の合計の長さをバイト単位で決定する GUI-UserControl クラスの getter メソッドを呼び出す必要があります。そして、その値は の構築に使用されTrackChunkます。

コンストラクター内でメソッドを呼び出すのは良い OOP プラクティスですか?

4

4 に答える 4

2

別のオブジェクトに依存してオブジェクトを初期化したい場合、これは正しいことのように思えます。たとえば、「Settings」クラスがある場合、多くの新しいインスタンスがその内部フィールドにアクセスしようとして、自分自身を初期化する方法を知ることは理にかなっています。
一般に、これは必ずしも良いことでも悪いことでもありません。通常のプログラミングと同様に、特定の状況に依存します。

于 2012-04-19T18:05:07.230 に答える
2

一般的に良くも悪くもありません。それが良いか悪いかの特定の状況があります。ただし、「悪い」ものを見つけるのは少し難しいでしょう。アイデアに本質的な間違いはありません。

于 2012-04-19T17:58:45.720 に答える
1

私がすることは、トラックの長さをコンストラクターのパラメーターとして渡すことです。

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 で使用されるオブジェクトのみを意図している場合、これは私にとってより理にかなっています。どちらにしても「正しい」と思います。

于 2012-04-19T18:35:02.020 に答える
0

Just because you can do something, doesn't mean you should. Perhaps expand on the question, provide an example and that'll help with your answers.

于 2012-04-19T17:58:19.413 に答える