LoginSignup
1
0

More than 5 years have passed since last update.

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第六章 ドメインオブジェクトのライフサイクル5(ファクトリ2)

Posted at

ファクトリ その2

ファクトリその1の続き

設計

1. 不変条件のどれかが満たされずに生成が失敗した場合どうなるかを決める

  • 例外をThrow
  • Nullを戻す

あまり、Nullは返したくないので、基本は例外を返すですね。

2. パラメータを慎重に選択する

特に、パラメータが新たな依存関係を作っていないかに注意。

安全なのは、構築するオブジェクトの構造の下位部分。

クラス図3.png

こんなFactoryなら(注:図はValueオブジェクトなど便宜上端折ってます)Customerとか、Itemとか作成しようとしているオブジェクトの構成要素が候補ですかね。

もうひとつは既に集約内で依存関係が出来ている要素ですね。下のファクトリメソッドのような感じです。
(注:図はValueオブジェクトなど便宜上端折ってます)

クラス図4.png

不変条件のロジックはファクトリが持つかオブジェクトが持つか?

オブジェクトを生成した後に不変条件のチェックが入る場合はオブジェクトが持つのがいいが、生成した後にもうチェックがない場合はファクトリが持つと生成したオブジェクトがシンプルになります。

エンティティファクトリと値オブジェクトファクトリ

値オブジェクトファクトリは値オブジェクトが不変なので、完全にすべての要素を生成する必要があります。

エンティティファクトリは集約を生成するのに必要な本質的な属性だけを受け取ることが多い。その詳細は後から追加すればいいということです。

エンティティと言えば同一性。識別子はプログラムで生成することもユーザーが指定することもできますが、ユーザーが指定する場合はファクトリの引数で渡せばいいですね。

プログラムで生成する場合には、ファクトリの内部で制御するのがよいです。

明日に続く。意外とファクトリの話し深いわ・・・

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0