再利用できるドメインオブジェクトの開発

 オブジェクト指向設計の目的は、開発効率をあげ、保守しやすい変更が容易なソフトウェアを作ること。そのために、「クラス」(オブジェクトの型)を基本単位にした「モジュール化」を行い、そのモジュールの再利用性を高める設計を目指す。

 ドメイン駆動設計の文脈から、オブジェクト指向が狙った「再利用」の現状を考えてみる。
 プレゼンテーション層とデータソース層では「フレームワーク」を使うことで、オブジェクト指向による「部品の再利用」のありがたさを日々実感している。

レイヤ構造

 実行基盤として Spring Boot, プレゼンテーション層の Spring MVC と Thymeleaf、データソース層の MyBatis を使うことで、開発期間を短縮でき、実績のあるフレームワークなので、安定した品質も確保できている。オブジェクト指向が狙った「再利用」が実現されている。
 しかし、ドメイン層は、毎回、独自に部品を開発しているのが実情。再利用できていない。
 電話番号、氏名、住所などは再利用できそうなドメインオブジェクトだが、実際にやってみると、個々の案件ごとの微妙な要求の違いを実装する必要があり、かえってコードが複雑になり、共通部品としてメンテナンスがたいへんな割には、再利用によるメリットがあまり感じられなかった。
 結局、参考にすることはあっても、毎回、白紙から書いている。

再利用への道


 バートランドメイヤーの「オブジェクト指向入門」を読み返していたら「第4章 再利用性へのアプローチ」に、部品の再利用について、いろいろ示唆に富んだ議論が展開されていた。
 もっとも、印象に残ったのが次の原則

 再利用の生産者になろうとする前に再利用の消費者になれ

 再利用の部品を作る前に、既存の良くできた部品を再利用することの経験を積むのが原則である、ということ。自分たちのドメインオブジェクトの再利用部品化の試みがなぜうまくいかなかった原因が、あるいは、世の中に、再利用可能なドメインオブジェクト部品が広がらない理由が、ここにありそう。

 プレゼンテーション層は、 Servlet プログラミングからスタートして、Spring MVC のような役に立つ再利用可能部品を使う経験を積んできた。 データソース層も、JDBCプログラミングから、MyBatis のような O-R マッピングフレームワークを部品として再利用することが当たり前になった。

 しかし、ドメイン層については、そういう定評のある再利用可能部品は、見当たらない。つまり、消費者として、良い部品の再利用の経験がないということ。 この状況で、「再利用できる部品」をうまく設計できるはずがない。

 参考にできる再利用性の高いドメインオブジェクト部品が無い現状では、再利用の消費者としての経験を積むことができない。だから、いつまでたっても再利用可能なドメイン層の部品の生産者にはなれないというジレンマに陥る。どうすればよいか。

やってみたいが...


 その突破口は、メイヤーが「再利用のアプローチ」の最後に書いている、「それでも再利用部品の生産者になろうという情熱」なんだろうと思う。また、今では定番になっているフレームワークも、生まれた時から圧倒的に支持されていたわけでなく、未成熟なフレームワークを使うくらいなら自作したほうが早くて確実、という評価の中で、フレームワークの開発者たちが情熱をもって、改良を続け、熱心な消費者(フレームワークの利用者)たちのフィードバックを糧に、質を向上させてきた、という発展の経緯をあらためて、認識することが大切なんだと思う。

 今の自分は、ドメイン駆動設計というアプローチに情熱をもって、個別の案件ごとのドメインオブジェクトの設計に日々取り組んでいる。
 では、それを再利用可能な部品として発展させる情熱があるかと言われると、正直、そこまでの強い思いは持てていない。今のところ、ドメイン駆動設計の実践ネタを勉強会やスライドで公開するくらいが関の山。

 しかし、ラフな試作品を公開するところからはじめ、さまざまなフィードバックを受けながら、再利用可能なドメインオブジェクトを発展させることは、本気で取り組んでみたいテーマではある。

 もし、再利用可能なドメインオブジェクトの開発に熱意や興味を持たれている方がいたら、ぜひ、情報交換をしてみたい。メールなりtweetなりでお声掛けください。

※ドメイン層で Bean Validation は積極的に使っている。これも再利用可能な部品であることはまちがいない。だが、脇役というか、ドメインオブジェクトそのものではない。


□この記事に登場した本
評価:
バートランド・メイヤー
翔泳社
¥ 7,776
(2007-01-10)
コメント:読むのがたいへんだが、ソフトウエア設計の考え方を基本的なところから勉強にするには、良い本。

Check

calendar
1234567
891011121314
15161718192021
22232425262728
293031    
<< May 2016 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM