A-Listers


ホーム | 固定ページ | アーカイブ


綺麗な設計を身に付けるためのSandi Metzルール

2013/05/20 11:56

スクリーンショット_2013_05_20_9_54
Webアプリやモバイルアプリの受託開発やコンサルティングを行うthoughtbot社のブログにて、Sandi MetzルールというRubyプログラマ向けのルールが紹介されていました。

このルールは、プログラマーでありPractical Object-Oriented Design in Rubyという書籍も執筆しているSandi MetzさんがRuby Roguesポッドキャストに出演した際に紹介していたものです。

そのルールは以下の通りです。

  1. クラス内のコードが100行を超えてはならない
  2. メソッド内のコードが5行を超えてはならない
  3. 4つより多い引数をメソッドに渡すようにしてはならない(ハッシュによるオプションもパラメーターとみなす)
  4. コントローラーではただ1つのオブジェクトだけをインスタンス変数化できる

項目は少ないですが、方向性としてはThoughtworksアンソロジーという書籍で紹介されていた「オブジェクト指向エクササイズ」に通じるものがあります(あちらはJavaが主な対象でした)。

4つのルールとは別に、このルールを破ってもよい場合として、

がルール0として挙げられています。

thoughtbotでは実際のプロジェクトにこのルールを適用してみたそうで、以下のような知見が得られたようです。

ルール4については、実際のコードを例に詳しく説明がされています。

ルール4を適用すると、1つのコントローラーが1つのオブジェクトだけをビューに引き渡すように設計することになりますが、実際のプロジェクトでは必ずしも1つのコントローラーが1つのものを表示するとは限りません。

例えば、「トップページにアクティビティフィードと通知の数を表示する」といったようなケースも頻繁にありえます。thoughtbotではこのようなケースにFacadeパターンを適用し、アクティビティフィードと通知の数を内包したダッシュボードクラスを定義することで、コントローラーとビュー間のやり取りを単純化させることにしたようです。

詳細は、実際のコード例を見れば一目瞭然だと思いますので、ぜひ元のブログ記事も参照してみてください。

作成者: junya

カテゴリー: Uncategorized

タグ: ,

6件のフィードバック to “綺麗な設計を身に付けるためのSandi Metzルール”

  1. 有益な記事をご紹介いただきありがとうございます。

    僭越ながらひとつ気になったので指摘させてください。
    原文> Five lines ensured that we never use else with elsif.
    なので、「elseやelsifを使うのを避ける」のではなく、「elsifは使わない」ですね。
    (if…else…endでちょうど5行に収まるというニュアンスなのだと思います。)

    By iTakeshi on 2013/05/20 @ 22:48

    1. ご指摘どうもありがとうございます。
      確かに、おっしゃるとおりの意味合いが正しかったようですので本文を修正いたしました。

      By junya on 2013/05/21 @ 00:28

      1. elsifも使わないわけではなくて、if ~ elsif ~ else ~ endまでいくと7行で5行に収まらないので、elseをelsifと一緒に使わなくなったということですね。elsif1回で5行の例は出ています。

        By TN on 2013/05/21 @ 09:21

      2. TNさん、ご指摘ありがとうございます。
        その通りですね。if〜elseと、if〜elsifのいずれかのみのパターンは許容される、というように本文を修正しておきました。

        By junya on 2013/05/21 @ 11:06

  2. アドバンストコミュニケーションテクノロジー's Blog でリブログ& コメント:
    キツイ感じがするが、心がけてみよう。

    By act2012bl on 2013/05/20 @ 23:59

  3. […] 綺麗な設計を身に付けるためのSandi Metzルール | A-Listers […]

    By 2013年Rubyの話題を一挙に振り返るまとめ | Engine Yard Blog JP on 2013/12/29 @ 15:38

コメントを残す



Mobile Site | Full Site


Get a free blog at WordPress.com Theme: WordPress Mobile Edition by Alex King.