MetzルールというRubyプログラマ向けのルールが紹介されていました。Roguesポッドキャストに出演した際に紹介していたものです。そのルールは以下の通りです。クラス内のコードが100行を超えてはならないメソッド内のコードが5行を超えてはならない4つより多い引数をメソッドに渡すようにしてはならない(ハッシュによるオプションもパラメーターとみなす)コントローラーではただ1つのオブジェクトだけをインスタンス変数化できるビューは1つのインスタンス変数を参照し、そのオブジェクトに対するメッセージ送信のみを行うことができる(@object.collaborator.valueは許可されない)項目は少ないですが、方向性としてはThoughtworksアンソロジーという書籍で紹介されていた「オブジェクト指向エクササイズ」に通じるものがあります(あちらはJavaが主な対象でした)。適切な理由があると考えられる場合ペアプログラミングのパートナーやコードレビュアーが許可した場合がルール0として挙げられています。thoughtbotでは実際のプロジェクトにこのルールを適用してみたそうで、以下のような知見が得られたようです。メソッド内のコードが5行を超えてはならないメソッドを5行に収めるために、elseやelsif「if〜else〜elsif〜end」のようにelseとelsifを合わせて使うことを避けるようになった(コメントで誤訳のご指摘をいただきましたので修正します。4つより多い引数をメソッドに渡すようにしてはならない(ハッシュによるオプションもパラメーターとみなす)Railsのビューヘルパーメソッドはとても多くの引数を要求するため、よい解決法が見つからない場合は、ルール0に立ち返り引数をそのままとしたルール4については、実際のコードを例に詳しく説明がされています。ルール4を適用すると、1つのコントローラーが1つのオブジェクトだけをビューに引き渡すように設計することになりますが、実際のプロジェクトでは必ずしも1つのコントローラーが1つのものを表示するとは限りません。「トップページにアクティビティフィードと通知の数を表示する」といったようなケースも頻繁にありえます。thoughtbotではこのようなケースにFacadeパターンを適用し、アクティビティフィードと通知の数を内包したダッシュボードクラスを定義することで、コントローラーとビュー間のやり取りを単純化させることにしたようです。詳細は、実際のコード例を見れば一目瞭然だと思いますので、ぜひ元のブログ記事も参照してみてください。RSS.有益な記事をご紹介いただきありがとうございます。僭越ながらひとつ気になったので指摘させてください。elsif.なので、「elseやelsifを使うのを避ける」のではなく、「elsifは使わない」ですね。(if...else...endでちょうど5行に収まるというニュアンスなのだと思います。22:48返信ご指摘どうもありがとうございます。確かに、おっしゃるとおりの意味合いが正しかったようですので本文を修正いたしました。endまでいくと7行で5行に収まらないので、elseをelsifと一緒に使わなくなったということですね。elsif1回で5行の例は出ています。09:21TNさん、ご指摘ありがとうございます。if〜elseと、if〜elsifのいずれかのみのパターンは許容される、というように本文を修正しておきました。コメント:キツイ感じがするが、心がけてみよう。コメントをキャンセルコメントを入力してください。以下に詳細を記入するか、アイコンをクリックしてログインしてください。アカウントを使ってコメントしています。アカウントを使ってコメントしています。アカウントを使ってコメントしています。アカウントを使ってコメントしています。新しいコメントがついたらメールで通知。us@alistersjpで更新をお知らせしています。(15秒)オクトキャットのフィギュアがついに発売開始。使用に同意したとみなされます。ポリシー%d人のブロガーが「いいね」をつけました。