我现在有一个小麻烦,管理我的依赖,同时试图保持单一的责任和良好的发展。
我有一个主课呼叫菜单:

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

现在,我看到的是menu类将菜单的所有不同部分组合在一起,并将其提供给假设的客户。菜是在自己的类(菜)中处理、更新、移除的,价格是以同样的方式(价格)完成的,然后有一个单独的类菜单编制者,其职责是将菜单的内容转化为一个精心安排的菜单。第17到19行是调用MenuFormatter类的地方,但我的问题出现在该类中:
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不知道菜单是什么,因为我没有在类中定义它我不确定如何使我的菜单变量指向菜单实例,以便它能够访问菜肴和价格。
我希望不要让menuformatter访问菜肴或价格,因为我觉得这可能导致在我的代码中不必要的进一步耦合。

最佳答案

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

def formatted_menu
  menuFormatter.formatted_menu(self)
end

这里,在Menu类的实例方法的定义中,self指的是调用formatted_menu方法的菜单实例。
然后在MenuFormatter中:
def formatted_menu(menu)
  # menu.dishes...
  # menu.prices....
end

关于ruby - 两个Ruby类相互依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37507880/

10-11 02:35