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

时间:2012-09-26 16:15:40

标签: design-patterns

我正在编写一个应用程序来录制鼓谱(特别是sampler)。我遵循采样器的惯例:

  1. 序列是1个或更多曲目序列可以是quantized(将测量值分解为相等的部分)。

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

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

    我遇到了主要的分析瘫痪,我无法确定属于特定Track的所有Sequence个对象的干净方式,以了解量化何时发生变化,以便更新它自己的内部数组?

    或者

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

1 个答案:

答案 0 :(得分:1)

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

由于序列启动了这一变化,我建议在Sequence对象上设置一个可公开访问的方法,该方法将序列的量化设置为一个整体,然后遍历序列的轨道来设置它们的量化。 Sequence.setQuantization()可以公开访问,Track.setQuantization()不应该。{/ p>

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

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