複雑なオブジェクトの生成処理を定義するオブジェクト。
オブジェクトの生成過程もドメイン知識といえる。
例:ユーザーIDの自動採番
- UserクラスのコンストラクタでDBの採番テーブルからIDを取得
- これはNG。特定の技術要素に偏っている
- UserFactoryで自動採番したUserクラスのインスタンスを返す
- これはOK。
- インターフェイスを定義すれば、採番処理を別の方法にも置き換えられる。
public interface IUserFactory
{
User Create(UserName name);
}ファクトリメソッド
なんらかのオブジェクトのインスタンス化で必要な、自身のフィールドをゲッターで公開したくない場合に代わりにインスタンスを生成して返せる。
public class User
{
private readonly UserId id;
public Circle CreateCircle(circleName circleName){
return new Circle(
id,
circleName
);
}
}