0

我正在编写一个应用程序来记录鼓谱(特别是用于采样器)。我遵循采样器的约定,它们是:

  1. 一个Sequence是 1 个或多个Tracks序列可以被量化(将度量分成相等的部分)。

  2. 音轨是将在小节的某些部分播放的乐器或声音。每个Track都被分解成多个部分。部分的数量由Sequence的量化决定。例如,如果量化设置为 1/16,则数组的长度为 16。然后,数组的每个元素存储声音是否应在Sequence中的该步骤播放。

自然,我有一个对象来表示一个Sequence。它有一个称为Track对象tracks数组的属性。Track对象具有与Sequence的量化长度相等的数组属性。

我正遭受严重的分析瘫痪,无法确定属于特定对象的所有对象知道量化何时发生变化以便它可以更新自己的内部数组的干净方法是什么?TrackSequence

或者

对象应该如何Track知道在不耦合Sequence对象的情况下将其数组长度设置为什么?

4

1 回答 1

1

如果每个轨道都必须属于一个且仅属于一个序列,那么它们本质上是耦合的。反映实现中的耦合不是问题(可能除了单元测试)。

由于序列会启动此更改,因此我建议在Sequence对象上使用可公开访问的方法,该方法将序列的量化设置为一个整体,然后遍历序列的轨道以设置其量化。Sequence.setQuantization()可以公开访问,Track.setQuantization()不应该。

为了确保保持耦合,我还将创建Track对象的能力限制为工厂方法Sequence(例如:)addTrack()

这就提出了独立单元测试TrackSequence. 做到这一点的一种方法是将这些对象创建为接口,然后每个对象都有一个单独的实现,并带有用于测试代码的钩子。这导致了它自己的丑陋,可能包括一个SequenceFactory,但只有你可以决定你需要多少纯度。

于 2012-09-26T16:33:37.283 回答