<< XP で、XML やテーブルはどうなるんだ? | main | オブジェクトの粒度 最小単位 >>

ドメインモデル貧血症

ドメインモデル貧血症をもう一度、考えてみる。

まず、ドメインのオブジェクトとその関連が、きちんと設計されていることが前提。
問題領域の言葉がそのままドメインクラス名になっている。言葉と言葉の関連も、きちんとモデリングされ、Java の参照や、SQL文として実装されている。

少なくとも「情報」とその関連を、きちんと分析して実装していることが、議論の大前提になっている。

ドメインモデルもなければ、ドメイン層もない設計は、そもそも議論の対象外。

貧血症かどうかは、振る舞いの問題。ドメインクラスが、どんなメソッドを実装しているかが、病状の診断基準というわけだ。

代表的なのが、validateion のロジックの置き場所。

Validator クラスに外出しする設計なら、貧血症。
ドメインクラスが、validate() メソッドを実装していれば、ドメインリッチ。

parse() や format() を外出しにしているのも、典型的な貧血症。
Java の Date クラスなんかが典型ですね。DateFormat クラスがわざわざ別にある。

ドメインリッチの良い例が InternetAddress クラス。
インターネットのメールアドレスに関する知識を豊富に実装しているから、ドメインリッチ。

・形式が、RFC822 に適合しているかをチェックする validate() メソッド。
・複数のアドレスの文字列表現を読み取る parse() メソッド。
・RFC822 準拠の形式で、 unicode 文字列で表現するための フォーマットメソッド。

InternetAddress クラスが、メールアドレスに関する豊かな知識の置き場所になっている。

住所の PostalAddress クラスとか、電話番号の PhoneNumber クラスとか、同じようなネタはいっぱいありますよね。 住所についての知識、電話番号に関する知識を、同じクラスのメソッドに実装するのが、ドメインリッチな設計。

Money クラスも、値を持つだけでなく、千円単位とか百万円単位とかの表現の知識を、 parse() と format()で実装する。

もちろん、金額計算も、add() とか、multiply() とかを実装する。 BigDecimal よりも、Money のほうが、ずっと、ドメイン駆動のオブジェクトになる。

ここらへんのドメインリッチの感覚をチームで共有すれば、ドメインクラスの設計が見違えるほどドメイン駆動になる。

とりあえず、validate() 、parse(), format() メソッドあたりから始めると、わかりやすいのかな?

コメント
コメントする









この記事のトラックバック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