0

I am writing an app to record drum tablature (specifically for a sampler). I am following the conventions of the sampler which are:

  1. A Sequence is 1 or more Tracks. A Sequence can be quantized (break the measure up into equal parts).

  2. A Track is an instrument or sound that will be played at certain parts of a measure. Each Track is broken up into parts. The number of parts is determined by the quantization of the Sequence. As an example, if the quantization is set to 1/16, the array will have length of 16. Each element of the array then stores whether or not the sound should play at that step in the Sequence.

Naturally, I have one object to represent a Sequence. It has an attribute called tracks which is an array of Track objects. A Track object has an array attribute that is in equal length to the quantization of the Sequence.

I am suffering major analysis paralysis and am unable to determine What is a clean way for all Track objects belonging to a specific Sequence to know when the quantization has changed so it can update its own internal array?

Or

How should the Track object know what to set its array length to without coupling the Sequence object?

4

1 に答える 1

1

すべてのトラックがただ 1 つのシーケンスに属さなければならない場合、それらは本質的に結合されます。その結合を実装に反映することは問題ではありません (おそらく単体テストを除く)。

Sequenceシーケンスがこの変更を開始するため、シーケンス全体の量子化を設定し、シーケンスのトラックを反復処理して量子化を設定する、オブジェクトでパブリックにアクセス可能なメソッドをお勧めします。Sequence.setQuantization()一般にアクセス可能になるTrack.setQuantization()はずですが、そうであってはなりません。

カップリングが確実に維持されるように、Trackオブジェクトを作成する機能を on のファクトリ メソッドに制限しますSequence(例: addTrack())。

これにより、独立した単体テストTrackSequence. これを行う 1 つの方法は、これらのオブジェクトをインターフェイスとして作成し、コードをテストするためのフックを使用してそれぞれを 1 つ実装することです。それはおそらく を含むそれ自体の醜さにつながりSequenceFactoryますが、必要な純度を決定できるのはあなただけです.

于 2012-09-26T16:33:37.283 に答える