オブジェクトデザイン

オブジェクトデザイン (Object Oriented SELECTION)

オブジェクトデザイン (Object Oriented SELECTION)

先週来日された Rebecca Wirfs-Brockさんによる責務駆動設計の本。
会社の後輩たちが翻訳。初稿の査読に協力したおかげで献本いただきました。
もう一度読み返してからここに書こうかと思っていたのですが、力つきたので一旦紹介しておきます。


簡単にまとめてしまうと、「責務 (Responsibility)」をオブジェクトに割り振り、そのオブジェクトどうしがコラボレーションすることで、アプリケーションを作り上げていく設計技法となります。
ただし、「責務駆動設計 (RDD; Responsibility-Driven Design)」と呼ばれているけれど、個人的には「責務」より「ロール」の方が重要かなと思いました。
いくつかの責務を適切に組合せて、オブジェクトの「ロール」を形作っていく。オブジェクトの「ロール」が簡潔に説明できると、うまく「責務」が分散されてきれいな設計になることが多いように思います。
そのための指針として、本書では「ロールステレオタイプ」というものを提唱しています。

  • 情報保持役 (Information Holder)
  • 構造化役 (Structurer)
  • サービス提供役 (Service Provider)
  • 調整役 (Coordinator)
  • 制御役 (Controller)
  • インターフェース役 (Interfacer)

単純な業務アプリだったら BCE とかでも十分だと思いますが、最初のクラスの候補を見つける上で参考になりそうな気がします。
もう一つ読んでいて思ったこと。本書ではオブジェクトの設計に「CRCカード」という手法を用いていますが、テスト駆動開発 (TDD; Test-Driven Development) のテストやリファクタリングと、見かけは違いますが、やっていることは近いかもしれないと思いました。

最後まで読みきるのは結構大変かもしれませんが(^^;)、半分くらいまで読むだけでも設計の勘が効くようになると思います。