2016-08-17 10 views
1

私たちは複雑なオブジェクトを作成するための工場を持っています。 (製作用)PHPデザインパターン工場、レポジトリ、...?

私たちはそれらを見つけるためのリポジトリを持っています。 (findin 'のもののために)

私たちはそれらを更新するために持っていますか? (変更のために)

パズルに足りない部分があるようですか?私はそれがリポジトリに属しているとは考えていません。それは単一の責任を破るためです。

+1

オブジェクト自体に対して実行されている操作を「更新」していませんか?あるいは、「既存のオブジェクトの変更された状態をデータストアに永続させる」のように「更新する」ことを意味しますか? – David

+0

オブジェクトを更新して、更新されたオブジェクトをリポジトリに戻します。あなたのリポジトリがメモリやデータベースにオブジェクトを保持しているかどうかは関係ありません。 '$ repo-> save($ object)' – CD001

+1

私たちはオブジェクトを保持するためのリポジトリを持っています。 。永続性には、見つけ出すだけでなく、新しいオブジェクトや更新したオブジェクトを格納すること(後で見つけられるもの)が含まれます。 – axiac

答えて

1

エンティティ(したがって、データベース)はリポジトリに属しています。リポジトリ自体は、データベース自体とプログラムの間のレイヤーです。

したがって、すべてのデータベース操作はリポジトリに属します。また、リポジトリはデータベースと通信してはならず、データソースとしてXML、CSV、またはAPIを持つこともできます。リポジトリと通信しているので問題はありません。リポジトリは、その後に来るすべてのものを扱います。

リポジトリを別のものに変更するだけで、リポジトリがすべて同じインターフェイスを実装するため、プログラムは問題なく動作します。あなたはそのMySQLデータベースがもう嫌いです、旧式のCSVははるかに優れていますか?使用したリポジトリを置き換えれば完了です。

リポジトリを使ってエントリを検索すると、SELECTステートメントよりも大きいので、なぜUPDATEまたはDELETEと一致しないのですか?さらにMSDN

に読ん

は、私はそれがアプローチに依存だと思うweb.archive.org

+0

その論理を取ると、「すべてのデータベース操作はリポジトリに属します。」あなたはスケールできません。 – AndrewMcLagan

+0

なぜスケールできませんか?すべてのエンティティには独自のリポジトリがあるため、エンティティの数、したがって使用するリポジトリの数を拡大します。 – KhorneHoly

+0

それについて考えてみてください。リポジトリの唯一の理由は、データベースの相互作用を抽象化することだけではありません。それらは「物を取り出すためのオブジェクト」です...それはまた、なぜファクトリーパターンが存在するのか「複雑なものを作成するためのオブジェクト」です。彼らはデータベースロジックを抽象化して利益を得ることができます...あなたが彼らの唯一の理由を言っているわけではありません... – AndrewMcLagan

1

に大きな説明と例を発見しました。

たとえばDDDでは、あなたが言っていることは真です。リポジトリはコレクション上で動作するため、リポジトリは追加、検索、削除を担当する必要がありますが、なぜ単一のオブジェクトを更新できるのかという疑問があります。

何ができますか?他の人が言ったことだけをコピーすると思いますので、私はちょうど答えのリンクを投稿してください:approach to removing save/update from repository

+0

興味深いノート ' - > save($ object)' ...もしあなたが棚から本を取り除くことができたとしても、本棚の類推に行くなら、TipExを出していくつかの修正を加えてからあなたが終わったら本棚。 – CD001

+1

実際には更新されていません。あなたが言ったことは、コレクションから削除して、基本的に新しいものを追加することです;-)例えばidの場合はどうでしょうか?それは状況を複雑にする。 – mmmm

+0

オブジェクトは自分のIDを知っていて変更されませんが、リポジトリがデータベースの上に座って自動的にコレクションの状態を維持すると、おそらくすべてが落ちます。 – CD001