ruby - 两个相互依赖的 Ruby 类

标签 ruby dependencies circular-dependency single-responsibility-principle

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

我有一个大师类电话菜单:

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 类将菜单的所有不同部分组合在一起,并将其提供给假设的客户。菜肴在它们自己的类(Dishes)中处理、更新、删除,价格以相同的方式(价格)完成,然后有一个单独的类 MenuFormatter,负责获取菜单的内容并将其转换为精心安排的菜单。第 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 不知道菜单是什么,因为我没有在类中定义它。我不确定如何让我的菜单变量指向 Menu 的实例,以便它可以访问菜肴和价格。

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

最佳答案

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

def formatted_menu
  menuFormatter.formatted_menu(self)
end

这里,Menu类的实例方法定义中,self指的是formatted_menu方法所在的menu实例叫做。

然后在 MenuFormatter 中:

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

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

相关文章:

java - Gradle依赖项目test-jar

android - 错误:Failed to resolve: com. android.support :design:25. 4.0;错误:Failed to resolve: com. android.support :support-core-utils:25. 4.0

c++ - 使用 std::map 和 std::list 构造 MRU 中的循环依赖

c++ - 在循环引用的上下文中处理循环包含

ruby - 正常方法中的 "self"与单例方法中的 "self"?

ruby - 比较 Ruby 中的对象等价性

java - 将 securesocial 模块添加到 play 2.2.1 项目

ruby-on-rails - capybara 无法点击链接,响应包含显示链接

c++ - Ruby 代码中的 C/C++?

php - 自引用模型导致 Laravel 4 中 x 的最大函数嵌套级别