我正在写一个应用程序来记录鼓表(专门用于采样器)。我遵循采样器的惯例,它们是:
-
序列为1个或多个轨迹。序列可以量化(将度量分解为相等的部分)。
-
曲目是在小节的某些部分演奏的乐器或声音。每个轨迹都被分解为多个部分。部件数量由序列的量化决定。例如,如果量化被设置为1/16,则阵列将具有16的长度。然后,数组的每个元素存储声音是否应在序列中的该步骤播放。
当然,我有一个对象来表示序列。它有一个名为tracks
的属性,它是Track对象的数组。Track对象的数组属性的长度与Sequence的量化长度相等。
我患有严重的分析瘫痪,无法确定对于属于特定Sequence
的所有Track
对象来说,什么是干净的方法来知道量化何时发生了变化,以便更新自己的内部数组
或
在不耦合Sequence
对象的情况下,Track
对象应该如何知道将其数组长度设置为什么
如果每个轨道必须属于一个且仅属于一个序列,那么它们本质上是耦合的。反映实现中的耦合不是问题(也许除了单元测试)。
由于序列启动了这种更改,我建议在Sequence
对象上使用一种可公开访问的方法,该方法为整个序列设置量化,然后迭代序列的轨迹以设置量化。Sequence.setQuantization()
可以公开访问,Track.setQuantization()
不应该是。
为了确保保持耦合,我还将创建Track
对象的能力限制为Sequence
上的工厂方法(例如:addTrack()
)。
这就提出了独立单元测试Track
和Sequence
的问题。实现这一点的一种方法是将这些对象创建为接口,然后用钩子实现每个对象以测试代码。这导致了它本身的丑陋,可能包括SequenceFactory
,但只有你才能决定你需要多少纯度。