在尝试维护单一职责和 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/