<< 実践 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
 123456
78910111213
14151617181920
21222324252627
28293031   
<< May 2017 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM