额外的服务类是否违反单一职责原则?

问题描述 投票:0回答:1

假设我已经实现了一个动作设计模式,并且我有这些动作:

  1. 制作果汁
  2. 煮咖啡
  3. 做早餐
  4. 制作甜点

现在,每个动作都应该有自己的一套指令。 但是,假设对于

MakeJuice
MakeCoffee
,我们有一个通用方法,我们称之为
prepareWater
,并且对于这两个操作具有相同的指令集。

我的问题是,创建一个

trait
来放置
prepareWater
方法而不是为每个操作单独定义它是反模式吗?

我正在考虑创建一个特质,以解决 DRY 原则,但我也认为这与 Actions 设计模式相矛盾。

现在,我在创建特征或为此创建契约/接口之间左右为难。

大家觉得怎么样?

design-patterns solid-principles single-responsibility-principle
1个回答
0
投票

假设准备水是一个独立的动作(例如“拿一瓶水并将其放在桌子上”),

prepareWater
应该执行一次(DRY)。

然而,在家长行动(

MakeJuice
MakeCoffee
)的背景下,水准备可能会以有些不同的方式整合。例如,煮咖啡时我们还应该煮水。此时复制(跨父操作)被认为是完全可以的。此外,它甚至很有用,因为它促进了解耦。

static class SubActions {
  static void PrepareWater() {
    TakeBottleOfWater(); // TODO: implement
    PutBottleOfWaterOnTable(); // TODO: implement
  }
}

class MakeJuice {
  void Execute() {
    this.PrepareWater();
    // TODO: set other sub-actions
  }
  void PrepareWater() {
    SubActions.PrepareWater();
  }
}

class MakeCoffee {
  void Execute() {
    this.PrepareWater();
    // TODO: set other sub-actions
  }
  void PrepareWater() {
    SubActions.PrepareWater();
    this.BoilWater(); // TODO: implement
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.