两个Ruby类相依为命

Two Ruby Classes Depending on Each Other

我目前在尝试维护单一职责和 OOD 时在管理我的依赖项时遇到了一些麻烦。

我有大师class调用菜单:

class Menu

  def initialize(dishes:, prices:, menuFormatter:)
    @dishes = dishes
    @prices = prices
    @menuFormatter = menuFormatter
  end

  def avaliable_dishes
    dishes.dishes_list
  end

  def dish_prices
    prices.prices_list
  end

  def formatted_menu
    menuFormatter.formatted_menu
  end

  private

  attr_reader :dishes, :prices, :menuFormatter
end

现在,我的看法是菜单 class 将菜单​​的所有不同部分组合在一起,并将其提供给假设的客户。菜肴在自己的 class(菜肴)中处理、更新、删除,价格以相同的方式(价格)完成,然后有一个单独的 class MenuFormatter 负责获取内容的菜单,把它变成一个很好的安排菜单。第 17 到 19 行是我的 MenuFormatter class 被调用的地方,但我的问题出现在 class:

class MenuFormatter

  def avaliable_dishes
    menu.avaliable_dishes
  end

  def dish_prices
    menu.dish_prices
  end

  def format_menu
    #Loop through dishes and prices and arrange them.
  end
end

我现在面临的错误是 MenuFormatter 不知道菜单是什么,因为我没有在 class 中定义它。我不确定如何让我的菜单变量指向 Menu 的实例,以便它可以访问菜肴和价格。

我不希望让 MenuFormatter 访问 Dishes 或 Prices,因为我觉得这可能会导致我的代码中不必要的进一步耦合。

如何将 menu 的实例本身作为参数传递给 format_menu 方法:

def formatted_menu
  menuFormatter.formatted_menu(self)
end

这里,Menu的实例方法定义中class,self指的是调用formatted_menu方法的menu实例。

然后在MenuFormatter:

def formatted_menu(menu)
  # menu.dishes... 
  # menu.prices....
end