2011-06-30 7 views
2

私はプロジェクトに参加しています。これは、exterarily Presenterパターンを使用しています。コントローラテストのPresenterパターンのメリット

プレゼンタークラスのすべてのメソッドは次のように、些細ているので、私は、それのメ​​リットが表示されていない。

class Checkout::NewPresenter 

    def initialize(customer, order) 
    @customer, @order = customer, order 
    end 

    def customer 
    @customer 
    end 
    def order 
    @order 
    end 
end 

Guysは、このパターンは、コントローラのテストがより簡単になりますことを、私に話しています。我々はコントローラのロジックから抽象化されており、特定の戻り値でプレゼンターオブジェクトをテストするだけでよい。

しかし、この効果は、プレゼンターレイヤーなしでコントローラのインスタンス変数を調べることで実現できます。

私はSimplifying your Ruby on Rails code: Presenter pattern, cells plugin準備ができてきたし、最初のケースでのみ同意:

あなたは広範囲にあなたのモデルを使用して、あなたのビューでいくつかのロジックを、持っています。そのような論理を持つ他のビューには場所がありません。古典的な推奨事項は、このコードをモデルに移動することですが、短時間のあいだ、モデルは愚かな一回限りのヘルパーメソッドで膨らみます。解決策:パターンプレゼンター。

私は2番目のケースを理解していません。

コンストラクタには、データベースまたは別のストレージからビューの値を取得するためのコードが多数含まれています。あなたはfragment_existをたくさん持っていますか?対応するフラグメントがすでにキャッシュに入っているときに、データが確実にロードされるようにするための呼び出し。サイズのため、特定のアクションをテストすることは本当に難しいです。解決策:パターンプレゼンター。

また、コントローラのテストでは、インスタンス変数のみを調べています。ここでの意味

主な質問は、コントローラーのテストにPresenterパターンがどのようなメリットがあるかです。

答えて

0

私は私は本当に、特に導体の周りの第三者から他の作品では見ていない、彼の例が有用であることが分かっRailsのプレゼンターパターンにジェイフィールドのプレゼンテーションを見てきました。

私にとっては、モデルを切り離すこと、つまりコントローラーや他のモデルから完全に切り離すことが利点です。私はビジネスロジックを扱うより良い方法だと思うし、コントローラーが薄くて、基礎となるデータストレージとその構造について何も知らないと思う。しかし、オリジナルのRails Presenter Patternには、それが含まれていた1つの問題がありました。プレゼンターオブジェクトは、コントローラーとビューの間に置かなければならないデータを提示するだけのものです。なぜなら、コンダクターは、モデルとコントローラーの間に位置するため、追加の関心事でなければなりません。

ブックエンタープライズRailsとフルブロードメイン駆動設計で述べたように、いくつかの選択肢が論理的および物理モデルはそこにもあります。もちろん

、レールの世界では、現在のソリューションは、それらにすべてのビジネスログインを詰め、関連するモデルを操作モデルのためのメソッドを作成することです。 DDDで

私はレールのためのいくつかのスライドとの提案を見てきましたが、私は発電機を持つ宝石はそう遠くない将来に利用可能になることを願っています本格的な実装を思えませんでした。DDDは複雑なプロジェクトには便利なオプションですが、デザインやレールの代替方法として、コードのドロップやモジュラー展開が可能な柔軟性が求められるため、余分なレイヤーやクラスの種類を混在させることはありません。問題。 Rails純粋主義者はそれを嫌うかもしれないが、それを使う必要はない。

0

あなたの例は、典型的なプレゼンターのようには見えません。発表者は、通常、ヘルパーメソッドで通常行うような、ビュー関連ロジック(例えば、日付の書式設定)を追加して、単一のモデルをラップする。

Checkoutオブジェクトのコンテキストは、ビューに渡されるのか、コントローラで使用されるのですか?

コントローラで2つのモデル間のやりとりを行うために使用されている場合は、ちょっとした形のように見えます(Data Context Interaction)。

一方、オブジェクトがビューに渡された場合、あまり気にしないプレゼンターのように見えます。将来の複雑さを管理するための前向きな考え方。

関連する問題