skillup

技術ブログ

ドキュメント作成

EntityとValue Objectについて

投稿日:

ドメイン駆動設計に関して勉強しています。参考にしている本がやたら難しいんで、トピックごとにネットで調べつつ進めていくのがよさげです。

今回はEntityとValueObjectについて

Entity

一般的にはテーブルをオブジェクトであらわたしたものがこれになることが多いようですが、もちろんイコールではありません。

しっかりとした定義としては下記のようなことがあげられます。

  • ユニークになるキーが存在する(必ず一意になる)
  • 内部の値が可変
  • ライフサイクル(生成→消滅)がある
  • 一般的には「顧客」などがEntityになることが多い

Value Object

Entityや他のValue Objectの「属性」として定義されます。下記のような特徴あり。

  • テーブルとして存在することがない
  • 値が不変。値の変更がある場合は、新しいものを別に作る必要があり
  • 一般的には顧客の名前、電話番号など属性の1つ1つがValue Objectとなることが多い

https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap2.html
http://qiita.com/haazime/items/6119097071149a362f7f
http://enterprisecraftsmanship.com/2016/01/11/entity-vs-value-object-the-ultimate-list-of-differences/
http://culttt.com/2014/04/30/difference-entities-value-objects/

実際のソース

ECCUBE3はどうやらドメイン駆動設計されているようでパッケージがController,Factory,Repository,Entity,などと分かれています。

そこでECCUBE3をみて実際にEntityなどで書かれているものを見てみます。

Entity内のプロパティ・メソッド

例: 注文(order)

プロパティ

  • 注文明細
  • 配送先
  • 顧客

ステータス系の値

複数持つ場合はすべてCollectionで持つ

メソッド

  • 商品種別のリストの獲得
  • 総数量・総金額値の獲得
  • 配送先情報の取得

基本的には関連する属性を取得・集計・判定するタイプのものが多い

-ドキュメント作成

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

コレクションの頻出処理に関して

PHPでコレクションを使っていますが、慣れると本当に便利ですね・・・まあforeachとかでグリグリやってもいいのですが、無駄にコードが長くなります。 自分がコレクションでよく使う再頻出のメソッドなど …

no image

ファジープロジェクト対策 その1

5月ぐらいから着手していたプロジェクト(顧客管理ソフト)が終焉を迎え、検証段階に入ったので、記して置きたいことなど。 数ヶ月程度ですが、自分が携わったプロジェクトの中では過去最大クラスのものでした。 …

no image

データベースのテスト環境作成

現在作っているシステムのリリースが近づいており、本番に近い環境を作成しお客様に見てもらうことに。 こういった手順はマニュアル化しておいたほうが楽だろうと思い、自分的にメモ 1 現状運用されているデータ …

no image

新アプリの本番環境デプロイについて

新しく作ったWEBアプリを本番配置しようとしたんですが、何度もやっているはずの処理がいざやろうとするといろいろと手間取ってしまい、1時間近くかかりました。 容量悪いなーと思いつつ、こういった行為はなる …

no image

小〜中規模程度のWEBアプリ作成で気をつけるべきこと

初見の処理系(ライブラリ操作)などは休日などで最小パターンを確認しておくこと。実務で何時間も悩むと非常にストレスがたまる テーブル設計命。あとで終えるようにトレースができるような値を入れておくこと。 …