BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Eric Evans氏の基調講演より - ドメイン駆動設計を実践するには

Eric Evans氏の基調講演より - ドメイン駆動設計を実践するには

ブックマーク

原文(投稿日:2018/02/06)へのリンク

読者の皆様へ: あなたのリクエストに応じて、大切な情報を見逃すことなく、ノイズを減らす機能を開発しました。お気に入りのトピックを選択して、メールとWebで通知をもらいましょう

Eric Evans氏にとって、ソフトウェア開発で重要なのは探求と実践だ。DDD(ドメイン駆動設計)の戦略的パターンに取り組んでいる氏にとって、本当の意味で興味があるのは、複雑なドメインに対する新たな思考法を見出すことにある。アムステルダムで開催されたDDD Europe 2018で行った基調講演の中で氏は、思考の箱(mental box)から抜け出して新たなコンセプトを見出す方法と、時間のドメインにおける現実的な例をいくつか紹介した。

DDDの元となった書籍の著者であるEvan氏は、チームがある領域において新たなコンセプトを発見し、その上に優れたソフトウェアを構築することのできたプロジェクトをいくつとなく経験している。残念ながら、その多くは公開の場で議論することはできない - 非開示契約(NDA)が関連していたり、あるいはその説明だけで多くの時間を要する特殊な領域であったりするためだ。

汎用サブドメイン(Generic Subdomain)とは、多くのシステムに共通して見られるドメインである。そのようなドメイン、特に我々が作業の方法に慣れてきたが故に長く無視され続けたドメインが、優れた実践の場であることに氏は気付いた。氏は開発者に対して、そのようなドメインでの新たなアイデアを探求して発見し、新たな可能性と、それらをモデリングする方法を見つけるための時間を確保するように奨励する。これは戦術的なレベルの実践だ、と氏は指摘する - 我々の設計対象は常に極めて具体的であり、コーディングによるアイデアの検証を必要とする。さらに氏は、本当の意味でのバリエーションを数多く持つことの重要性も指摘している。モデルの改善には部分的な機能拡張も重要だが、独創的な発想を得たいのであれば、真の代替策を考えることが必要だ。

その例としてEvans氏は、時間に関するライブラリのJoda-Timeを使用している。これはJavaプログラマにとって長く標準的なツールであったが、少し手を加えたものがJava 8で採用されている。10年にわたって大きく変更されなかった理由のひとつは、ほとんどの目的にとって十分なものであったからだ。そのため我々は、代替手段を探すことを止めた。そのライブラリに慣れることで、代替手段のある可能性さえも忘れてしまう。ついには別の方法を考えることさえできなくなるのだ。こうして我々は、Evans氏の言うレガシブラインド(legacy blindness)という状態に到達する。氏の経験によると、ほぼすべてのプロジェクトにおいて考え方を変える上での障害のひとつは、特に優れたレガシモデルがすでに存在する場合、現行のドメインモデルに慣れてしまうことにある。この状態を脱却するひとつの方法は、レガシモデルの不便な点を示す具体的なシナリオをひとつあげて、それを出発点とすることだ。

Evans氏は時間処理に関する新たな視点とコンセプトを見つけるべく、Joda-timeからいくつかの例をあげている。ひとつの例が、時間のインスタンスに対して月数を加えるというもので、開始日を考慮する必要があるために多少複雑な処理となる。

  • 2018年1月31日に1ヶ月を加えると、2018年2月28日が返される。
  • 2018年1月31日に2ヶ月を加えると、2018年3月31日が返される。
  • 2018年1月31日に1ヶ月を加えた後、さらに1ヶ月を加えると、2018年3月28日が返される。

もうひとつの具体例は、11月の第4木曜日である感謝祭の日付を求める新しい計算方法を試すことだ。このような実践の目的はライブラリ全体を置き換えることではなく、レガシブラインドを打破して、問題を解決する新たなコンセプトあるいはアイデアを見つけることにある、と氏は強調する。

DDD Europe 2019の計画は開始されたが、詳細なデータはまだ設定されていない。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT