1/22

「テーブルのautoincrementのidをentityに持たせる」を見て、自分も同じ所でモヤモヤしてました。entityにはuuidを発行させ持たせて、比較などは行う。DBにはidとuuidが保存されている状態はアンチパターンなのでしょうか? idだとDBのことに引きずられすぎてると思っていました。

結論としては、アンチパターンではなく、おかしくもありません。なぜかというと…(続) まず、エンティティとは、「識別子によって同一性判定するもの」です。識別子はいわゆるメールアドレスでもいいですし、いわゆるIDというものでもよいです。そのため、モデルとしてIDを持つことはおかしくありませんし、エンティティの実装クラスがIDを持つことも問題ありません。 しかし、それをDBに永続化するときにどうするか、は切り分けて考えことができます。リポジトリはインターフェイスがドメイン層で、実装クラスがインフラ層なので、ドメイン層はDB側がどのようになっているか気にしなくてよくなります。 その際、DB側でオートインクリメントされる連番のカラムがあっても、何も問題はありません。リポジトリがエンティティのインスタンスにマッピングする際に、そのカラムを無視すればよいだけです。「かならず連番のidと名の付くカラムが必要」という事情があっても、それは「インフラ層の都合」としてインフラ層に閉じ込め、ドメイン層などその他の層には影響させないことができるのです。 そこで冒頭の質問に戻ると、UUIDをエンティティの識別子として使用して、dbの事情としてインフラ層以外には意識させなくすることができます。むしろこれはレイヤーの責務をうまく取り扱っていると考えられます。

スポンサーリンク

質問はquerie.meからお願いします。さんになんでも質問しよう!

質問

スタンプ

利用できるスタンプはありません。

スポンサーリンク

質問する

過去に答えた質問

スポンサーリンク