用于解耦依赖于另一个对象的对象的方法



我正在写一个应用程序来记录鼓表(专门用于采样器)。我遵循采样器的惯例,它们是:

  1. 序列为1个或多个轨迹序列可以量化(将度量分解为相等的部分)。

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

当然,我有一个对象来表示序列。它有一个名为tracks的属性,它是Track对象的数组。Track对象的数组属性的长度与Sequence的量化长度相等。

我患有严重的分析瘫痪,无法确定对于属于特定Sequence的所有Track对象来说,什么是干净的方法来知道量化何时发生了变化,以便更新自己的内部数组

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

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

由于序列启动了这种更改,我建议在Sequence对象上使用一种可公开访问的方法,该方法为整个序列设置量化,然后迭代序列的轨迹以设置量化。Sequence.setQuantization()可以公开访问,Track.setQuantization()不应该是。

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

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

最新更新