两个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
我目前在尝试维护单一职责和 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