私は現在、Single ResponsibilityとOODを維持しようとしている間、私の依存関係を管理するのに少し問題があります。2つのRubyクラスはお互いに依存します
私はマスタークラスの呼び出しメニューがあります。
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クラスが一緒にメニューの異なる部分のすべてを引き出し、そして架空の顧客に供給することです。料理は自分のクラス(料理)で処理、更新、削除され、価格は同じ方法(価格)で行われ、別のクラスのMenuFormatterがあります。メニューの内容はメニューの内容を取り出し、きれいに整えられたメニュー。 i「はので、私は今に直面していますエラーが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
は何のメニューである:17〜19行目は、私のMenuFormatterクラスが行動に呼び出されるが、私の問題は、そのクラス内で発生している場合ですクラス内で定義されていません。メニューの変数がメニューのインスタンスを指すようにする方法がわからないので、料理と価格にアクセスできるようになります。
私は自分のコード内で必要以上にカップリングする可能性があると感じているので、MenuFormatterにDishesまたはPricesへのアクセスを与えないことを希望しました。
いくつかのフィードバックは... 1)私がお勧めMenuFormatterはメニューにネストクラスです。 2)MenuとMenuFormattterの両方が料理と価格に依存していると、間違ったことはありません。彼らはどちらも合法的なニーズを持っています。 3)おそらくMenuFormatterは状態を持たず、Classの代わりにModuleとして実装することができ、それによってステートレス性を伝えることができます。 4)私はあなたがタイプミスをしていると思う、あなたは "エラーは私が*直面していない*"と言う。 –
ありがとう@KeithBennett、私はネストされたクラスとモジュールを調べます。非常に有益であり、誤植を発見してくれてありがとう。 依存関係の場合、私はあなたに同意しますが、現在どちらも正当なニーズを持っています。コードの実際の目的は、可能な限り変更可能なコードを作る上での練習として、私のクラスを分離してできるだけインジェクトする傾向があることを念頭に置いています。 – Joe