<< 実践 ICONIXプロセス : ロバストネス図にユースケースを置く | main | 実践 ICONIXプロセス : ロバストネス図という魔法 >>

コード : 変数の直接アクセス

Kent Beck の書籍から。

ガレージのドアを制御するプログラムを書く場合、どれが読みやすいか?

doorRegister = 1 ;

doorOpen() ;

door.Open() ;

もちろん、下に行くほど「やりたいこと」をうまく表現している。
制御ビットに1を立てるという実装の詳細より、ドアを開ける、という意図を表明したコードの方が読みやすい。
もちろん、実装方法の変更にも強い。

基本は、直接アクセスより、メソッドで間接アクセスにして、メソッド名に意図を表す名前をつけるのが良い。

どの範囲で x=1 という直接アクセスの記述をOKとするか、いろいろ選択肢がある。

・アクセサメソッドの内部とコンストラクタの内部に限定する (最も限定するパターン)
・クラス内はOK
・サブクラスまでOK
・パッケージ内はOK
...

Kent Beck は、「一般的なルールはない。自分で考え、まわりと議論し、勉強しろ! それがプロになっていくということ」と書いていますね。 ( Implementation Patterns p.46 )

私は、できるだけ制限する最初のパターンがベストだと思っていました。
同じクラス内でも、アクセサ以外は、アクセサを使うというパターンですね。

でも、ドメイン駆動を勉強するようになってから、わりと小さなクラスを作るようになり、「クラス内は直接アクセスOK」派に転向しました。

x=1 式の記述は、直接的で分かりやすい。同じクラス内で、わざわざアクセサを使うより、理解も速いし、まちがいが少ないと思います。でも、小さなクラス限定です。

大きなクラスを、意図が明確な複数のクラスに分割していくリファクタリングでアクセサを活用しています。
でも最終形は、クラス内では直接アクセスにする。

1.アクセッサメソッド式にして、できるだけ間接アクセスにする。
2.関連が強いフィールドとアクセサをまとめて小さなクラスに抽出する。
3.抽出したクラスに割り当てることが適切なメソッドを、そちらに移動する。
4.移動したメソッド内でアクセサを使っていたら、フィールドの直接アクセスにインライン化

という感じです。

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< July 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