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

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

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

レイヤ構造

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

再利用への道


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

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

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

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

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

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

やってみたいが...


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

 今の自分は、ドメイン駆動設計というアプローチに情熱をもって、個別の案件ごとのドメインオブジェクトの設計に日々取り組んでいる。
 では、それを再利用可能な部品として発展させる情熱があるかと言われると、正直、そこまでの強い思いはないように思う。
 ラフな試作品を公開し、さまざまなフィードバックを受けながら、再利用可能なドメインオブジェクトの開発に取り組んでみたいと本気で思える時がきたら、ぜひ、取り組んでみたいテーマではある。
 今のところは、ドメイン駆動設計の実践ネタを勉強会やスライドで公開するところがくらいが、せいぜいなんだろうけど。

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

※ドメイン層で Bean Validation は積極的に使っている。これも再利用可能な部品であることはまちがいない。


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


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