4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ミライトデザイン社内勉強会#21】「IDDD本から理解するドメイン駆動設計」輪読会~第12章「リポジトリ」~

Last updated at Posted at 2021-03-28

前回の記事

【ミライトデザイン社内勉強会#20】「IDDD本から理解するドメイン駆動設計」輪読会~第11章「ファクトリ」~ - Qiita

実践DDD本 第12章「リポジトリ」~集約の永続化管理を担当~ (1/3):CodeZine(コードジン)

前回、ファクトリの章でファクトリを利用するのは生成の時って話だったけど、再構築(リポジトリから取り出す)時もファクトリを利用することがあるの?

p1

image.png

  • 基本的には難しい生成の処理でファクトリを使うので、再構築(DBから値とってきてオブジェクトに詰めるだけ)の場合はあんまり使うイメージはない
  • リポジトリで再構築するのも、ファクトリで再構築するのもコードの内容はあまんまり変わらない気がするから、ファクトリを使う意味がない気がする
  • ここでは再構築の処理をファクトリに切り出しているだけの気がする
  • DBだけでは足りない時は(DBに保存されているデータプラス、APIで取得する値が必要とか)、ファクトリを作ることがあるのかも
  • プロジェクトで、オブジェクトの生成はファクトリを使うっていうルールがある場合もあるかも
  • 複雑なものを再構築する場合、集約の生成はファクトリでやるっていうルールになっている場合とかはファクトリを使う場合もある
    • ここで、ファクトリを使うかはそこまで重要な話ではないと思う
    • 使ってもいいし、使わなくてもいい
    • でも、再構築でファクトリを使う必要がある場合は少ない

アプリケーションサービスでトランザクションを管理すると、アプリケーションサービスがインフラ層に依存することになりそうだけど問題ないの?

p2

image.png

  • 本来はよくない
  • でも、ここでやるしかないからここにいる
  • トランザクションはいろんな方法があるPHPは実コードに書くけど、Javaだとアノテーションだったり
    • トランザクションの方法によってはUseCaseに書かなくてもいい方法もある
    • UseCaseでロールバックの処理を制御したい場合はJavaの場合でもUseCaseに書く必要がある
  • トランザクションの方法としては3つ考えられる

NoSqlとかあまり使ったことがないけど、永続指向のリポジトリを利用するメリットって何かあるの?

p3

DAOがよくわかってない。名前の通りだとデータをアクセスするためのオブジェクトだけど、どういう時にどんなふうに使用されるのか知らない。

  • SQLの代わりみたいなもの
  • だいたいDDDじゃないほうのリポジトリみたいなもの
  • MVCフレームワークのモデルみたいのもの
    • モデルは、そのクラスにまつわるその他の処理も書かれていたりする
      • MVCフレームワークでDDDで実装しようとすると、モデルをDAOとして扱うような実装をすることが多い
    • getUserとかgetUserListとか持ってるようなもの
  • EloquentみたいなモデルはORマッパーなので、データアクセス+マッピングもしてくれるイメージ
  • リポジトリの中でDBにアクセスするために使用するオブジェクト
  • DAO以外の場所にDBにアクセスする処理は書かない
  • p1 リポジトリとDAOの違い にも軽く書いてある

コレクション指向と永続指向の違い・使い道がよくわかっていない。そもそもNoSQL自体の理解もあまりない。

image.png

  • 基本的にはコレクション指向で考えて、パフォーマンス重視だと永続化指向
  • 集約とリポジトリが1対1になるようなことをコレクション指向と読んでいて、複数の集約(階層構造の集約)が単一のリポジトリを使用することがある場合は、ドキュメントとして追加できる永続指向の方が相性がいいのではないか。
    • 店舗集約・スタッフ集約のように集約は分けているけど、1つのリポジトリを使用するパターンみたいな
  • IDDD本では変更の検知ができるかできないかによってコレクション指向か、永続化指向かを使い分けているようなことが書いてある
    • 変更検知ってなんだ?
    • O/Rマッパーの変更検知の話っぽい?
    • 昔はトランザクションが貼れなかったからその話も関係あるのかも
    • よくわからん
  • ユーザーと記事の1対nの関係があったとして、NoSQLは記事をユーザーのリストとして扱うことができないのではないか。
    • RDBではユーザーのリストで持つことができるが、NoSQLはユーザーのリストとして扱うことができないので、コレクションの機能などが使えないのではないか。

例えばユーザーを削除するとき、ユーザーが投稿した記事もすべて削除するといった場合は、アプリケーションサービス層で記事のリポジトリを呼び出して削除した方が良いか?もしくはユーザーのリポジトリ内で記事のデータの削除も行って良いのか?

調べた単語

トランザクションスクリプト

  • 手続き型のスクリプト
  • UseCaseみたいな

テーブルデータゲートウェイ

  • DAOみたいなもの

アクティブレコード

  • アクティブレコードパターン
  • MVCのモデルは大体アクティブレコードパターン

次回

【ミライトデザイン社内勉強会#22】「IDDD本から理解するドメイン駆動設計」輪読会~第13章「分散システム設計」~ - Qiita

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?