两个相互依赖的Ruby类
我目前在管理我的依赖关系时遇到了一点问题,同时试图维护单一的责任和OOD 我有一个主类调用菜单:两个相互依赖的Ruby类,ruby,dependencies,circular-dependency,single-responsibility-principle,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
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访问菜品或价格,因为我觉得这可能会导致代码中不必要的进一步耦合。将
菜单
本身的实例作为参数传递给格式菜单
方法如何:
def formatted_menu
menuFormatter.formatted_menu(self)
end
这里,在菜单
类的实例方法的定义中,self
指调用格式化菜单
方法的菜单实例
然后在菜单格式中:
def formatted_menu(menu)
# menu.dishes...
# menu.prices....
end
一些反馈…1)我建议MenuFormatter是嵌套在菜单中的类。2) 我不认为菜单和菜单格式都依赖于菜肴和价格有什么不对。他们都有合理的需求。3) MenuFormatter可能没有状态,可以作为模块而不是类实现,从而传递无状态。4) 我认为你有一个输入错误,你说“我没有遇到的错误”。谢谢@KeithBennett,我将研究嵌套类和模块。非常有帮助,谢谢你发现了错误。对于依赖项,在本例中我同意您的看法,它们目前都有合法的需求。代码的实际用途是作为一种实践练习,尽可能地生成最可变的代码,考虑到这一点,我倾向于保持类的解耦并尽可能多地注入。