2016-05-29 9 views
2

私は現在、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へのアクセスを与えないことを希望しました。

+0

いくつかのフィードバックは... 1)私がお勧めMenuFormatterはメニューにネストクラスです。 2)MenuとMenuFormattterの両方が料理と価格に依存していると、間違ったことはありません。彼らはどちらも合法的なニーズを持っています。 3)おそらくMenuFormatterは状態を持たず、Classの代わりにModuleとして実装することができ、それによってステートレス性を伝えることができます。 4)私はあなたがタイプミスをしていると思う、あなたは "エラーは私が*直面していない*"と言う。 –

+0

ありがとう@KeithBennett、私はネストされたクラスとモジュールを調べます。非常に有益であり、誤植を発見してくれてありがとう。 依存関係の場合、私はあなたに同意しますが、現在どちらも正当なニーズを持っています。コードの実際の目的は、可能な限り変更可能なコードを作る上での練習として、私のクラスを分離してできるだけインジェクトする傾向があることを念頭に置いています。 – Joe

答えて

1
format_menuメソッドに引数として menu自体のインスタンスを渡すことについてどのように

Menuクラスのインスタンスメソッドの定義では、

def formatted_menu 
    menuFormatter.formatted_menu(self) 
end 

ここで、selfは、メニューのインスタンスを参照し、その上にformatted_menuメソッドが呼び出されます。

そしてMenuFormatter中:

def formatted_menu(menu) 
    # menu.dishes... 
    # menu.prices.... 
end 
関連する問題