<< オブジェクトの粒度 最小単位 | main | ドメインオブジェクトの粒度 : テーブルとのマッピング >>

オブジェクトの粒度:小さなオブジェクトに分ける

役割が明確な小さなオブジェクトに分けるのが、基本中の基本。

小さなオブジェクト

従業員を表現するために、従業員オブジェクトをルートとして、

・個人
・氏名
・電話番号
・生年月日

・期間
・給与

という小さなオブジェクトで構成する。

個人

氏名や電話番号のサブのルートクラス。

氏名

姓、名、セイ、メイを保持
バリデーションや、"姓名(セイメイ)"などのフォーマット出力を担当

電話番号

電話番号のバリデーションとか、フォーマット出力を担当

生年月日

生年月日を保持して、年齢計算も担当

期間

開始日と終了日を保持。
ある期間とある期間が重なっているかとか、期間演算を担当

給与

マネークラスのサブクラス。
将来は、給与計算ロジックを追加する場所。

---

オブジェクト指向の分析設計の発展形である、ドメイン駆動設計のオブジェクトの構成はこんな感じなる。

Evans の Domain-Driven Design のパターンでいえば、

・従業員オブジェクトは、Entity.
・その他のオブジェクトは Value Objects.

・従業員オブジェクトが、Aggregate のルート

この Aggregate の単位で、オブジェクト群を生成するために、 Factory パターンを使う。
Aggregate の単位で、保存と取り出しをするために、Repository パターンを使う。

Java の実装イメージ

class Employee
{
 Person person ;
 DateRange range ;
 Salary salary ;
}

class Person
{
 PersonName name ;
 PhoneNumber phoneNumber ;
 BirthDate birthDate ;
}

class EmployeeFactory
{
 Employee createEmployee() { }
}

class EmployeeRepository
{
 Employee find() { }
 List search() { }
}



---

オブジェクト指向の分析設計で、Java で実装すると、まあ、このくらいの粒度が良い感じ。

かなり小さい。
  • それぞれクラスの役割は単純
  • ドメインロジックをどこに置くかも、単純明快(ロジックが関連する情報を持つクラス)
  • ドメインのロジックに追加や変更をする時、対象のオブジェクトは、すぐわかる
  • 変更の副作用の影響範囲は、特定のオブジェクトに限定される

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 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