我正在编写一个应用程序来录制鼓谱(特别是sampler)。我遵循采样器的惯例:
序列是1个或更多曲目。 序列可以是quantized(将测量值分解为相等的部分)。
曲目是将在某个小节的某些部分播放的乐器或声音。每个曲目都分为几部分。部件数量由序列的量化确定。例如,如果量化设置为1/16,则阵列的长度为16.然后,阵列中的每个元素都会存储声音是否应在序列中的该步骤播放。
当然,我有一个对象来表示序列。它有一个名为tracks
的属性,它是 Track 对象的数组。 Track 对象的数组属性与 Sequence 的量化长度相等。
我遇到了主要的分析瘫痪,我无法确定属于特定Track
的所有Sequence
个对象的干净方式,以了解量化何时发生变化,以便更新它自己的内部数组?
或者
Track
对象如何在不耦合Sequence
对象的情况下知道如何设置其数组长度?
答案 0 :(得分:1)
如果每个轨道必须属于一个且只有一个序列,则它们本质上是耦合的。反映实现中的耦合不是问题(除了单元测试之外)。
由于序列启动了这一变化,我建议在Sequence
对象上设置一个可公开访问的方法,该方法将序列的量化设置为一个整体,然后遍历序列的轨道来设置它们的量化。 Sequence.setQuantization()
可以公开访问,Track.setQuantization()
不应该。{/ p>
为了确保保持耦合,我还限制了在Track
上为工厂方法创建Sequence
个对象的能力(例如:addTrack()
)。
这开启了独立单元测试Track
和Sequence
的问题。一种方法是将这些对象创建为接口,然后使用一个钩子来实现代码的单个实现。这导致了它自己的丑陋,可能包括SequenceFactory
,但只有你可以决定你需要多少纯度。