<< 実践 ICONIXプロセス : 機能を洗い出す コントローラ | main | 変更率 ( Rate of Change ) >>

調和 (Symmetry)

Kent Beck が 「実装のパターン」(Implementation Patterns) の中であげている六つの原則の一つが「調和 (symmetry)」。

本の中の具体例:

void process()
{
 input();
 count++;
 output();
}

このコードの真ん中の行だけが、他の行より具体的になっている。これは調和がとれていない、良くないパターン。

改善案は、真ん中の行もメソッド呼び出しにする。これでバランスがとれる(調和する)。

void process()
{
 input();
 incrementCount();
 output();
}

でも、これでは Kent Beck は満足しない。 incrementCount() は、「何をしているか」の説明で、「何をしたいか」という意図を表現できていない。

最終案は、

void process()
{
 input();
 tally();
 output();
}

// tally は「集計する」という意味

これで、全体が調和する。

このサンプルコードで変更した箇所は真ん中の行だけ。

count++;
incrementCount();
tally()

どれが一番読みやすいコードか?

Kent Beck は、 tally() が一番良いといっている。意図を的確に表現しているから。

count++ も、incrementCount() も、プログラミング、手続きの視点。

tally() は、業務の視点、つまりこのソフトウェアが実現すべき機能を表している。

これが一番良いコード、読みやすいコードだというのが Kent Beck の価値観なわけです。

私は、ドメイン駆動の視点からも、tally() が問題領域の言葉としてもっとも適切だと思う。

将来、業務上、 tally() つまり集計のルールが変わっても、変更箇所が明確で安全にかつ簡単に変更できそう。

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
  • 番号より名前。 ニーモニックコードより名前。 【パターン】
    師子乃 (03/10)
  • Smart UI が優れている?
    masuda220 (03/10)
  • Smart UI が優れている?
    kagehiens (03/09)
  • オブジェクト指向プログラミングの教え方?
    masuda220 (12/05)
  • オブジェクト指向プログラミングの教え方?
    ZACKY (12/04)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    kompiro (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    JHashimoto (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (02/28)
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM