MVPとCellsを利用してプログラムコードを整理します
4429 ワード
今回のrubyconfでは、プログラムコードを整理するテクニックで、MVPとCellsの2つの比較的少ないテクニックを紹介しました.
MVP ? どうやってMVCに似てるの?彼らには何か関係がありますか?
そう、MVPは実はModel-View-Presenterの略です.
MVPとは
一般的な実作MVCアーキテクチャでは、「ビジネスロジックに関する資料」および「資料の処理方法」をカプセル化するには、Model に置かなければならない.からViewまで、「資料とインターフェースの提示を担当する」 のみを担当する.
しかし、あなたも私もよく知っています.これは「理想の状態」です.
実際の状況は、多くのウェブサイト「UI高度依存ビジネスロジック」 ビジネスは非常に複雑で、controllerまたはviewでビジネスロジック を実行せざるを得ない場合があります.実務的には複雑なmethod refactorをmodelに移すことを教えてくれますが.しかし、現実的にはmethodでこのViewで一度だけ使用する業務もある.そしてモデルにあるべき基礎methodではありません.何でもモデルに投げつける化で、モデルは異常に肥大してしまいます.
だからMVCのようなアーキテクチャは最後には使用できません.最後にPresenterをさらに実装する必要があります.は比較的少ないが、実用的な複雑な/expensiveビジネスロジックを抽出してPresenter に置く必要がある.ビジネスロジックが抽出されてPresenterに置かれると、UIを変更する難易度は より低くなります.
これにより、codeのメンテナンス性が大幅に向上します.
セルとは?
それでもPresenterは足りません.
これもNickが書いたRails Misapprehensions:What the fuck is MVP?一文の主な原因.
(講演会の後、著者のNickさんと少し話をしました.彼のCellsのデザインを褒めました.彼はさっぱりしていて、ついに誰かがCellsのデザインの原因を知っていると思っていました.そして不思議に思っていました.彼の文章ははっきり書いているのに、どうしてたくさんの人が分からないのですか.Cellsはまだ少ない人が使っています.LTを延長してXDを広告してあげましょう)
足りないのは、PresenterでControllerを整理する動作しかできなかったからです.MVPは「大段のプログラムコード」をControllerから搬出するだけ.
本当に解決すべき理由はありません.
「避けられないのはViewsの中で論理を作って、query資料」
どう思う?
Big deal
私はCellsを使い始めます.初心はMVCに厳格に従いたいからではありません.Cacheを必要とするコードが増えているので、今の事件でcacheを必要とするコードを整理するのに良い方法が必要です.
Cellsはcodeを整理する方法が私のニーズに合っているので、私たちは大きなプログラムコードをCellに移してcacheをし始めました.
1ヶ月後、Bad performance codeを整理する時間になりました.
専案のいくつかのプログラムコードは実はとても嫌いで、あなたはどうしてもViewの中で輪query資料に戻らなければなりません.例えば、このようなcode:
このコードはとても痛いです.Developerはこのcodeにはほとんど方法がありません.
君にできることはただ残っているから全体にcacheを打って、背景preheat cache にあります. partialに分解して階層ごとにcacheを打つ.背景preheat cache controller/presenterでincludesを降りてjoinになってquery数を減らします.
OK.これは実は何の役にも立たない.スピードがあまり速くないからだ.
これはperformance issueを後ろに引きずって解決しただけだ.
スピードの遅い真の元凶
本当にスピードが遅い元凶は、Query in Viewです.
Rails Developerはすべて知っていて、partialはとても遅いです.しかし、その原因を究明する人は少なく、問題をRailsのせいにしているだけだ.
しかし、実際に真剣に追いかけてみると、htmlを純粋に入れたviewが見つかり、renderはとても速いです.
本当に遅いのは、Viewで資料/query資料を処理しなければならないpartialです.
ULTRA SLOW
勝手に中にあるものをqueryします.partial全体が死ぬほど遅い.
さらに悪いことに、もしあなたのHeaderのリストがQuery資料が必要なら、おめでとうございます.大当たり!
どうやって解くの?
Controllerに引っ越してquery羅へ!
でも前の段のcodeは、全然運べないよ...
Cellsが提供する解決方法
Cellsの動作原理は,各セグメントにcacheを必要とするcodeを1セグメントcomponentにすることである.このcomponentには自分の「mini controller」と「view」がある.
Cellsのメカニズムにより,viewではなくheavy queryをmini-controllerに大幅に取り外すことができる.
これはプログラム潔癖者の中毒を解消しただけでなく(MVCでコードを入れなかった)、実は深刻なperformance issueを解決した.
前のcodeのように、実は私はそれを3層cellに分解することができます.
このようなテクニックを使って、Cellを使って汚いプログラムコードを書き直すことに成功しました.運行時間は550 msから10 msに大幅に下がった.君が信じようと信じまいと、ぼくはどうせ信じたんだ.
Cellsの背後にある物語
Cellsの背後にある理屈が実は二重のissue(MVCとquery in view’s performance issue)を解いたと思うと、このようなすごいデザインに心から感嘆しました.何日も興奮した.
今回Rubyconf、私は特に作者のNickにこのような考えかどうかを闻いて、彼はとても喜んで1つの知音に出会って、そして私に多くの人がCellsを使わないと愚痴をこぼして、彼をとてもうっとうしいです...明らかに彼はCellsとPresenterの说明を书くのがとても简単で、やはり多くの人が理解できません..
それから彼がとっくに書いた投影映画を取り出して、私と私の家のSA vincentにLT XDDDDDを手伝うように強要しました.
その后、私は彼に闻いて、どのようにこのようなIdeaを思い出します.彼は言います:“私はルビーを使って2時間、更にRailsを使って2時間、それからこのような愚かなMVCに耐えられなくて、自分で1セットしました......”
締めくくり
もしあなたがPerformanceのissueを持っているなら、Railsを責めないで、まずあなたのpartialがこのような設計を取っているかどうかを見てみましょう.Cellsはcacheを整理する良いツールだけでなく、Codeを整理する絶好のツールです.あなたのcodeがもっとMVCになるのを助けて、走るのがもっと効率的です.
広告:Essential Rails Design Pattern for Beginnersという本は、即日前売りを開始します.原価14.99 USD.前売りは9.99です.この本は9月末か10月初めに出版される.
本章「MVPとCellsであなたのプログラムコードを整理する」も収録される.
MVP ? どうやってMVCに似てるの?彼らには何か関係がありますか?
そう、MVPは実はModel-View-Presenterの略です.
MVPとは
一般的な実作MVCアーキテクチャでは、
しかし、あなたも私もよく知っています.これは「理想の状態」です.
実際の状況は、
だからMVCのようなアーキテクチャは最後には使用できません.最後にPresenterをさらに実装する必要があります.
class Sites::ShowPresenter
def hottest_topics
@hottest_topics = @site.topics.hottest.limit(10)
end
def recent_topics
@recent_topics = @site.topics.unhidden.recent(10)
end
end
def show
@presenter = Sites::ShowPresenter.new(@site)
@headline_topic = @presenter.headline_topic
@categories = @presenter.categories
@site_alias = @presenter.site_alias
add_breadcrumb @site.name, site_path(@site)
seo_meta_desc_keywords(@site)
end
これにより、codeのメンテナンス性が大幅に向上します.
セルとは?
それでもPresenterは足りません.
これもNickが書いたRails Misapprehensions:What the fuck is MVP?一文の主な原因.
(講演会の後、著者のNickさんと少し話をしました.彼のCellsのデザインを褒めました.彼はさっぱりしていて、ついに誰かがCellsのデザインの原因を知っていると思っていました.そして不思議に思っていました.彼の文章ははっきり書いているのに、どうしてたくさんの人が分からないのですか.Cellsはまだ少ない人が使っています.LTを延長してXDを広告してあげましょう)
足りないのは、PresenterでControllerを整理する動作しかできなかったからです.MVPは「大段のプログラムコード」をControllerから搬出するだけ.
本当に解決すべき理由はありません.
「避けられないのはViewsの中で論理を作って、query資料」
どう思う?
Big deal
私はCellsを使い始めます.初心はMVCに厳格に従いたいからではありません.Cacheを必要とするコードが増えているので、今の事件でcacheを必要とするコードを整理するのに良い方法が必要です.
Cellsはcodeを整理する方法が私のニーズに合っているので、私たちは大きなプログラムコードをCellに移してcacheをし始めました.
1ヶ月後、Bad performance codeを整理する時間になりました.
専案のいくつかのプログラムコードは実はとても嫌いで、あなたはどうしてもViewの中で輪query資料に戻らなければなりません.例えば、このようなcode:
<% sites.each do |site| %>
<% site.categories.each do |category| %>
<% category.popular_posts.each do |post| %>
<%= post.title %>
<%= post.content %>
<% end %>
<% end %>
<% end %>
このコードはとても痛いです.Developerはこのcodeにはほとんど方法がありません.
君にできることはただ残っているから
OK.これは実は何の役にも立たない.スピードがあまり速くないからだ.
これはperformance issueを後ろに引きずって解決しただけだ.
スピードの遅い真の元凶
本当にスピードが遅い元凶は、Query in Viewです.
Rails Developerはすべて知っていて、partialはとても遅いです.しかし、その原因を究明する人は少なく、問題をRailsのせいにしているだけだ.
しかし、実際に真剣に追いかけてみると、htmlを純粋に入れたviewが見つかり、renderはとても速いです.
本当に遅いのは、Viewで資料/query資料を処理しなければならないpartialです.
ULTRA SLOW
勝手に中にあるものをqueryします.partial全体が死ぬほど遅い.
さらに悪いことに、もしあなたのHeaderのリストがQuery資料が必要なら、おめでとうございます.大当たり!
どうやって解くの?
Controllerに引っ越してquery羅へ!
でも前の段のcodeは、全然運べないよ...
Cellsが提供する解決方法
Cellsの動作原理は,各セグメントにcacheを必要とするcodeを1セグメントcomponentにすることである.このcomponentには自分の「mini controller」と「view」がある.
Cellsのメカニズムにより,viewではなくheavy queryをmini-controllerに大幅に取り外すことができる.
これはプログラム潔癖者の中毒を解消しただけでなく(MVCでコードを入れなかった)、実は深刻なperformance issueを解決した.
前のcodeのように、実は私はそれを3層cellに分解することができます.
このようなテクニックを使って、Cellを使って汚いプログラムコードを書き直すことに成功しました.運行時間は550 msから10 msに大幅に下がった.君が信じようと信じまいと、ぼくはどうせ信じたんだ.
Cellsの背後にある物語
Cellsの背後にある理屈が実は二重のissue(MVCとquery in view’s performance issue)を解いたと思うと、このようなすごいデザインに心から感嘆しました.何日も興奮した.
今回Rubyconf、私は特に作者のNickにこのような考えかどうかを闻いて、彼はとても喜んで1つの知音に出会って、そして私に多くの人がCellsを使わないと愚痴をこぼして、彼をとてもうっとうしいです...明らかに彼はCellsとPresenterの说明を书くのがとても简単で、やはり多くの人が理解できません..
それから彼がとっくに書いた投影映画を取り出して、私と私の家のSA vincentにLT XDDDDDを手伝うように強要しました.
その后、私は彼に闻いて、どのようにこのようなIdeaを思い出します.彼は言います:“私はルビーを使って2時間、更にRailsを使って2時間、それからこのような愚かなMVCに耐えられなくて、自分で1セットしました......”
締めくくり
もしあなたがPerformanceのissueを持っているなら、Railsを責めないで、まずあなたのpartialがこのような設計を取っているかどうかを見てみましょう.Cellsはcacheを整理する良いツールだけでなく、Codeを整理する絶好のツールです.あなたのcodeがもっとMVCになるのを助けて、走るのがもっと効率的です.
広告:Essential Rails Design Pattern for Beginnersという本は、即日前売りを開始します.原価14.99 USD.前売りは9.99です.この本は9月末か10月初めに出版される.
本章「MVPとCellsであなたのプログラムコードを整理する」も収録される.