問題タブ [ddd-repositories]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flex - DDD および非同期リポジトリ
RMI と JMS の両方を使用して、Java バックエンドに接続されたリッチ クライアント (Flex で記述) に取り組んでいます。クライアントを DDD 方式で実装して、ドメイン オブジェクトに対する CRUD 操作用のリポジトリを作成することを考えていました。
ただし、問題は、すべてのバックエンド通信が非同期で発生し、クライアントが応答を受信するまで強制的に続行を待機させる方法がないことです。つまり、低レベルでは、リモート オブジェクトのメソッドを呼び出すことができ、戻り値として AsyncToken を取得できます。その後、asynctoken のイベントをリッスンして、呼び出しが成功したか失敗したかを確認できます。ただし、これはリポジトリの背後にある主なアイデアを壊し、技術的な詳細をクライアントから隠します。
私が推測する2つのオプションがあるかもしれません:
- リポジトリのメソッドが asynctoken を返すようにします。これは面倒な解決策のように思えます。
- メソッドが空のコレクション (たとえば、findAll の場合) を返すようにします。このコレクションは、応答を受信したときに満たされます。
どちらも一長一短ありますので、皆様のご意見をお聞かせいただければと思います。
(これをさらに進めると、適切なキャッシュ戦略は何でしょうか?状況によっては、リポジトリからすべてのエンティティを要求するたびにリポジトリがサーバーを呼び出すことは望ましくありません。リポジトリのメソッドの署名にどのように影響しますか? )
c# - ドメイン駆動設計-論理的削除
だから、私は素晴らしいドメインモデルを構築しました。リポジトリはデータアクセスとそうでないものを処理します。理由を削除とともにログに記録する必要があることを示す新しい要件がポップアップ表示されました。これまで、削除はかなり単純でした=> Entity.Children.Remove(child)。ORMツールが状態管理を処理していたため、内部変更の追跡は行われませんでした。ただし、これをどのように処理するかは正確にはわかりません。
1)削除された子コレクションを親エンティティに保持し、変更追跡をnHibernateから引き出して、自分で処理することができます。
2)??????
asp.net-mvc - MVC Storefront を生成するための完璧なコード生成ツールはありますか?
Rob Conery が MVC Storefront で作業した方法でリポジトリやその他のプロジェクトを生成するための優れたコード生成ツール (現在のバージョンでは IQueryable をサポートしていないため、Subsonic 以外) を知っている人はいますか?
c# - アトミック アクションごとに 1 つの DataContext で LINQ to SQL を使用する際の問題
次のような(非常に単純化された)システム(少しDDDのような)でLinq to SQLの使用を開始しました。
さて、問題が発生しました。このように SomeEntityRepository を使用しようとすると
プログラムが最後の WriteLine に到達するまで、すべてがうまく機能ObjectDisposedException
します。
実際の問題はわかりますが、どうすればこれを解決できますか? いくつかの解決策があると思いますが、これまでに考えたもののどれも私の状況には適していません。
- リポジトリ パターンから離れて、作業のアトミックな部分ごとに新しい DataContext を使用します。
- 私は本当にこれをしたくありません。理由は、アプリがリポジトリを意識したくないからです。もう 1 つは、linq2sql を COM で可視化するのは良いことだとは思わないということです。
- また、私が
context.SubmitChanges()
意図したよりも多くのことをコミットする可能性が高いと思います。
- 関連する要素をフェッチするための DataLoadOptions を指定します。
- 場合によっては、ビジネス ロジック レイヤーがいくつかのエンティティで応答するようにしたいので、どのサブ プロパティを使用する必要があるかわかりません。
- すべてのプロパティの遅延読み込み/遅延読み込みを無効にします。
- かなりの数のテーブルがあり、それらは強くリンクされているため、オプションではありません。これにより、多くの不要なトラフィックとデータベースの負荷が発生する可能性があります。
- インターネット上のいくつかの投稿では、.Single() を使用すると役立つはずです。
- どうやらそうではありません...
この悲惨さを解決する方法はありますか?
ところで: Linq t0 SQL を使用することにしたのは、それが比較的軽量な ORM ソリューションであり、.NET フレームワークと Visual Studio に含まれているためです。.NET Entity Framework がこのパターンにより適している場合は、それに切り替えるオプションになる可能性があります。(実装はまだそこまで進んでいません。)
domain-driven-design - リポジトリパターン:遅延読み込みの方法は?または、この集計を分割する必要がありますか?
私は、エディターとプロジェクトの概念を持つドメインモデルを持っています。
編集者は多数のプロジェクトを所有しており、プロジェクトには編集者の所有者だけでなく、多数の編集者メンバーもいます。したがって、編集者には多数の「参加」プロジェクトもあります。
私はこれをモデル化し、永続性のためにリポジトリパターンを使用するためにDDDアプローチを採用しています。しかし、私はまだパターンを十分に理解していないので、これをどのように行うべきかを判断できません。
私は、エディターとプロジェクトが潜在的に同じ集合体であり、ルートがエディターであるという前提で作業しています。したがって、エディターを取得してそのプロジェクトを列挙し、そこからプロジェクトのメンバーのエディターを列挙することができます。
ただし、リポジトリからのエディタの取得のみが許可されている場合、それを所有するエディタを取得するときに、リポジトリからすべてのプロジェクトをロードする必要があるということではありませんか?また、メンバーのエディターを遅延ロードする場合、プロジェクトにはリポジトリへの参照も必要ですか?
または、アグリゲートを分割してエディターリポジトリとプロジェクトリポジトリがある場合、新しいプロジェクトがエディターに追加されたときなど、2つの間でトランザクションをどのように処理する必要がありますか?例えば:
リポジトリパターンの意図を誤解していますか?
language-agnostic - ドメインモデルとPOCOクラスを使用する場合、クエリはどこに行きますか?
私はドメインモデル、POCO、DDDに慣れていないので、まだいくつかのアイデアに頭を悩ませようとしています。
私がまだ理解できなかったことの1つは、ドメインモデルをシンプルでストレージに依存しないように保ちながら、データに対して豊富な方法でいくつかのクエリを実行できるようにする方法です。
たとえば、OrdemItemのコレクションを持つエンティティOrderがあるとします。なんらかの理由で最も安い注文アイテム、または現在在庫がない注文アイテムのリストを取得したいのですが。私がしたくないのは、ストレージからすべての注文アイテムを取得し、後でフィルタリングすることです(高すぎる)ので、どういうわけか「SELECT .. WHERE ITEM.INSTOCK=FALSE」タイプのdbクエリを使用することになります。そのSQLクエリをエンティティに含めたくない、またはそれがLinq2SQLのNHibernateクエリのように特定のプラットフォームに結びつくかどうかのバリエーションは必要ありません。その場合の一般的な解決策は何ですか?
domain-driven-design - すべての「バルク」操作はDDDのどこに属しますか?
DDDの重要な概念の1つはリポジトリです。これにより、エンティティ(または集約ルート)を取得し、更新後に保存して戻すことができます。
エンティティを使用して「バルク」操作を実行する必要があり、エンティティの数によってそれらをメモリに取得することが絶対に不可能であると仮定します。つまり、操作はデータベースでのみ実行できます。
そのような「バルク」操作の場所はどこにありますか?それはリポジトリ上のメソッドである必要がありますか?データベース固有の操作でリポジトリの抽象化を「リーク」しませんか?事業運営をエンティティからリポジトリに移しませんか?
nhibernate - ドメインオブジェクトのリポジトリとその保存方法に関する質問
DDD、リポジトリ パターン、および ORM に関して、ややばかげた質問があります。この例では、Address、Company、Personの 3 つのクラスがあります。Person は Company のメンバーであり、Address を持っています。会社にも住所があります。
これらのクラスは、データベース モデルを反映しています。モデルの依存関係をすべて削除したため、NHibernate や LinqToSql などの特定の ORM ライブラリに関連付けられていません。これらの依存関係は、リポジトリ内で処理されます。
リポジトリの 1 つの内部には、データベースに既に存在するかどうかに応じて Personを挿入/更新するSavePerson(Person person)メソッドがあります。
Person オブジェクトには Company があるため、現在、その SavePerson 呼び出しを行うときに Company プロパティの値も保存/更新しています。この手続き中に、会社のすべてのデータ (名前と住所) を挿入/更新します。
しかし、Person を処理している間に Company のデータが変更される可能性がある場合を考えるのは非常に困難です。Company を Person に割り当てたり、Person を別の Company に移動したりしたいだけです。新しい人物と一緒に新しい会社を作りたいとは思わない。そのため、SaveCompany 呼び出しにより、不要なデータベース呼び出しが導入されます。Person を保存するときは、CompanyId 列を更新できるはずです。
しかし、Person クラスには Company プロパティがあるため、それを更新または挿入する傾向があります。厳密/純粋な観点から、SavePerson メソッドは Person 全体を保存する必要があります。
好ましい方法は何ですか?Person を保存するとき、またはすべてのデータを保存するときに、Company プロパティの CompanyId を挿入/更新するだけですか? または、両方のシナリオに対して 2 つの異なるメソッドを作成しますか (名前は何にしますか?)
また、別の質問ですが、私は現在、Person、Address、および Company を保存するための個別のメソッドを持っているため、Company を保存するときに SaveAddress も呼び出します。LinqToSql を使用すると仮定します。これは、同じ Linq クエリで Company と Address を挿入/更新しないことを意味します。2 つの Select Calls (会社が存在するかどうかを確認する、住所が存在するかどうかを確認する) があると思います。そして、両方の Insert/Update 呼び出しが 2 回あります。より多くの複合モデル クラスが導入されれば、なおさらです。LinqToSql がこれらの呼び出しを最適化する方法はありますか?
編集
このフォローアップの質問も参照してください。値オブジェクトはどのようにデータベースに保存されますか?
domain-driven-design - エンティティがリポジトリにアクセスしても問題ありませんか?
私はDDDを使い始めたばかりなので、これはばかげた質問かもしれません...
実行時に値を取得するためにエンティティが (いくつかの IRepository インターフェイスを介して) リポジトリにアクセスしても問題ありませんか? たとえば、プロパティの「デフォルト」選択を強制したい:
私の質問は、このようなことを行うことが DDD の原則に対する恐ろしい違反であるかどうかです。そうでない場合、私の次の質問は、使用するリポジトリを提供する最良の方法は何ですか? Person オブジェクトの作成時に指定する必要がありますか?
ありがとう、P
ddd-repositories - DDD: 値オブジェクトのリストを取得するのに最適な場所はどこですか
製品に割り当てられた「製品タイプ」という値タイプがあります。(製品は 1 つの製品タイプを持ちます)
ユーザーがリストからタイプを選択できるようにするために、ドロップダウンに入力します。製品タイプのリストを取得するのに最も適しているのはどこですか? リポジトリ パターンを実装するクラス?
編集:製品コードを製品タイプに変更して明確にしました。商品の種類は「DVD」「CD」「Blu Ray」などです。