質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

Q&A

解決済

1回答

4489閲覧

リポジトリパターンについて

arisuke

総合スコア13

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

0グッド

0クリップ

投稿2019/03/16 13:32

最近リポジトリパターンなるものを知り、調査しました。
そしてそのリポジトリパターンについて質問があります。
なお特に参考になったと感じたものは以下の記事です。
https://qiita.com/mikesorae/items/ff8192fb9cf106262dbf

まず大雑把にまとめると
リポジトリはDDDで言う集約と1対1に対応して作成されます。
そしてリポジトリはドメインオブジェクトを操作できるようにする責務を負います。(ただし、オブジェクトの正当性などのチェックはここでは行わない=ビジネスロジックを持ち込まない)
以上から、リポジトリから取得したものは必ず集約内のオブジェクトも全て取得する必要があるかと思います。

しかし、実際にはその集約オブジェクトのみ欲しい場合があります。
例えば受注明細を持つ受注票をひとつの集約オブジェクトとみなした場合、受注票の一覧画面では受注明細まで取得する必要はありません。さらにどのような一覧を見せるのかはビジネスロジックとなるので、このような場合は、その一覧画面用のサービスクラスを作り、そこでリポジトリを介さず受注票のみを取得するものを提供すれば良いという考えで間違いないでしょうか?(リポジトリは、一覧画面から詳細画面に遷移するときなどに使用する)

もし他にもこのように実装するなどありましたらお教えいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参照先の記事を読んだ限りでは、リポジトリを経由してストレージにアクセスするという原則は更新系の処理に対するもので、参照系はそうではない、ということであるので、arisukeさんの理解に誤りはないと思います
小規模なアプリケーションの場合は、参照系の処理もリポジトリに置いてしまってもよい、という旨の記述もありますが

結局のところ、抽象的なリポジトリで隠蔽することによるもろもろのメリット(テストのしやすさ、DBの移行のしやすさ、要件があいまいな状態でも開発が進められるなど)や、集約によるメリット(複数のエンティティに跨る更新処理のようなバグの入り込みやすい一連の流れを一つのリポジトリに集約(隠蔽)できる)を損なわないような塩梅でリポジトリを用いるのがよい、とのことのようですね

投稿2019/04/11 13:07

kanaria007

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arisuke

2019/04/13 00:16

現在の個人的な考えとしては、基本的には参照系と更新系を切り分けたいと思っています。(もちろん書かれているように規模にもよると思いますが) というのも参照系は多くの場合、テーブル結合が起こり専用のクラス(これはドメインオブジェクトではないため、アプリケーション層に置く)が必要になりますし、性能で問題となるのも参照系となるからです。 それと、そもそも更新系や参照系で変更が必要となる起点が異なるので、別々にしたほうが収まりが良いように感じているからです。 といっても結局のところ書かれているように、メリットなどを都度しっかり考えて適切にどのように使用するか選択していくということになりますが(この塩梅がすごく難しいですね) 少なくとも大筋では考え方が間違っていないということを確認できました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問