問題タブ [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.

0 投票する
1 に答える
138 参照

.net - LINQ2SQL、永続性の無視、およびドメイン モデル

ドメイン モデルの永続性をサポートするために LINQ to SQL を使用した人はいますか?

私は LINQ2SQL エンティティ デザイナーを使用する予定はありません。昔ながらの手でコーディングされた XML マッピングを使用するだけで、現在障害があります。

私の聴衆はLINQ2SQLしか知らないので、私がやっているDDDの例でそれを使用しようとしています。

0 投票する
1 に答える
4164 参照

java - JPA / Springを使用した(一般的な)DDDリポジトリーのアプローチ:見た目が間違っていますか?

私はDDDとJPAにかなり慣れていません。

私はJPAとSpringを使用して汎用リポジトリに取り組んでいます。DDD:ジェネリックリポジトリJPA実装パターン:データアクセスオブジェクトの記事で公開されているアプローチが本当に好きです。私の目的は、JPAとSpringを使用してドメイン駆動設計で完璧なリポジトリを構築することです。

最初の記事の概念に従って、内部の汎用リポジトリを使用して、データストアとのドメインの契約を尊重します。

次に、特定のエンティティ(例:組織)のリポジトリは次のようになります。

これは、JPAとSpringを使用してDDDリポジトリーを実装するための良い方法のように見えます。次に、OrganizationRepositoryがサービスレイヤーに挿入されます。

欠陥や誤解を避けるために、外部の意見を持ちたいです。あなたはどう思いますか、そしてそれをどのように改善することができますか?

ありがとう。


編集:

  • @AutowiredoninternalRepository-指摘してくれたaxtavtに感謝します。
  • read()を改善できます
0 投票する
1 に答える
2388 参照

domain-driven-design - 複数の DDD リポジトリで SQLAlchemy を効果的に使用するにはどうすればよいですか?

SQLAlchemy を使用してリポジトリ パターンを実装する方法の例をいくつか見つけようとしています。具体的には、複数のリポジトリを実装します。

複数のリポジトリの場合、各リポジトリは個別の SQLAlchemy セッションを維持することによって最適に実装されると思います。ただし、あるセッションにバインドされたオブジェクトのインスタンスを別のセッションに移動しようとすると、問題が発生します。

まず、これは意味がありますか?各リポジトリは、他のリポジトリとは別に独自の UoW を維持する必要がありますか?それとも、コンテキスト全体が同じセッションを共有しても安全であると見なすべきですか?

次に、あるセッションからインスタンスを切り離し、別のセッションにバインドする最良の方法は何ですか?

第三に、SQLAlchemy を念頭に置いて書かれた確かな DDD リポジトリの例はありますか?

0 投票する
1 に答える
1416 参照

architecture - DDD を Northwind データベースに適用する

いくつかの演習を行い、DDD を Northwind データベースに適用されたドメイン モデルに適用したいと考えています。Northwind が例であるとしても、「仮想ビジネス」の要件を満たすために行われたと思います。したがって、目標は、DDD を尊重するドメイン モデルを作成し、データを Northiwnd データベースに保存することです。

この EF 永続化モデルを検討してください。

代替テキスト
(出典:developpeur.org

エンティティと双方向の関係しかないことに注意してください。DDDを尊重する本物のDMが欲しいです。さらに、DM モデルはデータベースのミラーである必要はありません

  1. 必要に応じて、一方向のみの関係または双方向の関係を持つように des 関係を変更する方法。

  2. 1 対 1 に変更できる多対 1 または 1 対多の関係はありますか?

  3. 集計をどのようにモデル化しますか?

  4. 必要に応じて、値のオブジェクト、サービス、およびファクトリはどうですか?

おそらくビジネス要件を確認し、モデルをどのように変更する必要があるかを確認する必要があることはわかっていますが、それについてアドバイスをお願いします。

私の質問が明確でない場合は、遠慮なく詳細を尋ねてください。

前もって感謝します。

0 投票する
2 に答える
879 参照

c# - DDD:C#を使用して、Poco、リポジトリ、DTO、およびDAOに関連する並べ替えとフィルタリングをコーディングしようとしていますか?

リポジトリからアイテムのリストを取得します。次に、それらを並べ替えてフィルタリングする必要があります。これは、効率を上げるためにリポジトリで行われると思います。DDDの方法でこれを行うには2つの方法があると思います。

  1. フィルタと条件でいっぱいのソートオブジェクトをリポジトリに送信しますか(これは何と呼ばれますか)?
  2. リポジトリの結果は、.filterメソッドと.sortメソッドを持つオブジェクトを生成しますか?(複数のオブジェクトが含まれているため、これはPOJO / POCOではありませんか?)

それで、答えは1、2、または他ですか?理由を説明していただけますか?リポジトリは必要なデータしか送信できないため(または#2はLazyListのようにデータへのアクセスを遅らせることができるので)、#1に傾いています。コード例(またはWebサイトリンク)は非常に役立ちます。

例:

  1. 製品product=repo.GetProducts(mySortObject、myFilterObject); //Pocoのリスト
  2. product.AddFilter( "price"、 "lessThan"、 "3.99"); product.AddSort( "price"、 "descending");
0 投票する
1 に答える
424 参照

entity-framework - EF4とDDDを使用するための最良の方法は何ですか

DDDプロジェクトのORMとしてEFf4を使用したいと思います。クラスに基づいてモデルを生成します。基本的に、コンシューマー向けのビジネスオブジェクトのdtoオブジェクトであるクラスを作成する必要がありますか、それともEFモデルに実際のBOクラスを実装する必要がありますか?

0 投票する
2 に答える
738 参照

asp.net-mvc - Linq to Sql、Repositories、およびAsp.Net MVC ViewData:冗長性を削除する方法は?

Linq to SQLは、IQuery可能でリレーションがいっぱいのオブジェクトを作成します。
HTMLヘルパーには、のような特定のインターフェイスオブジェクトが必要ですIEnumerable<SelectListItem>

私が起こり得ること:

  • すべての手荷物なしでLinqからSQLへのオブジェクトを再利用します。つまり、追加のドメインモデルクラスなしでLinqからSQLオブジェクトへのPocosを返しますか?
  • SelectListItem列挙のようなHtmlヘルパーオブジェクトに簡単に変換できる(または変換できる)オブジェクトを抽出しますか?

関心の分離を壊さずにこれを行う方法はありますか? ニーズを埋めるための巧妙なトリック?

たとえば、これがリポジトリ内にある場合、SelectListItemはそこにありません。これselect newは、手荷物なしでLinqからSQLにオブジェクトを切り出すための優れた方法ですが、それでも参照されるべきではないクラスを参照しています。

0 投票する
3 に答える
2035 参照

c# - ASP.NET MVC:どのメカニズムがViewModelオブジェクトを返しますか?

私が理解しているように、ドメインモデルはデータ(集合体ルート)のみを記述するクラスです。それらはPOCOであり、外部のライブラリを参照しません(特別なことは何もありません)。

一方、ビューモデルは、ドメインモデルオブジェクトと、のようなすべてのインターフェイス固有のオブジェクトを含むクラスですSelectList。ViewModelにはが含まれusing System.Web.Mvc;ます。

リポジトリはデータベースからデータを引き出し、ドメインモデルオブジェクトを介してデータを提供します。 どのメカニックまたはデバイスがビューモデルオブジェクトを作成し、データベースからそれらを作成しますか? データベースにアクセスできる工場でしょうか?System.Web.Mvcなどのビュー固有のクラスをリポジトリにブリードしますか?他に何かありますか?

たとえば、都市のドロップダウンリストがある場合は、ビューモデルオブジェクトのルートで、DomainModel参照のすぐ隣にあるSelectListオブジェクトを参照します。

都市はデータベースから取得され、選択リストオブジェクトの形式である必要があります。個別の都市だけを抽出するための特別なRepositoryメソッドを作成せずに、適切なデータ型を使用できるように、冗長な2番目のSelectListオブジェクトのみを作成することをお勧めします。

0 投票する
7 に答える
2706 参照

unit-testing - 単体テストをシンプルかつ分離した状態に保ちながら、DDD 不変条件を保証するにはどうすればよいでしょうか?

DDD では、ドメイン オブジェクトを常に有効な状態にすることをお勧めします。集約ルートは、オブジェクトが有効な状態で初期化されるように、必要なすべての部分でオブジェクトを組み立てるための不変条件とファクトリを保証する責任があります。

ただし、これにより、単純で分離された単体テストを作成するタスクが非常に複雑になるようです。

Books を含む BookRepository があるとします。本には次のものがあります。

  • 著者
  • カテゴリー
  • その本を見つけることができる書店のリスト

これらは必須の属性です。書籍には、著者、カテゴリ、および少なくとも書籍を購入できる書店が必要です。これは非常に複雑なオブジェクトであるため、BookFactory が存在する可能性が高く、Factory は少なくとも前述のすべての属性で Book を初期化します。おそらく、Book コンストラクターを非公開 (および入れ子になった Factory) にして、Factory 以外の誰も空の Book をインスタンス化できないようにします。

次に、すべての本を返す BookRepository のメソッドを単体テストします。メソッドが本を返すかどうかをテストするには、一部の本がすでにリポジトリにあるテスト コンテキスト (AAA 用語でのアレンジ ステップ) を設定する必要があります。

C# の場合:

Book オブジェクトを作成するために自由に使用できる唯一のツールが Factory であることを考えると、単体テストは Factory を使用し、これらのオブジェクトに間接的に依存しています。テストコンテキスト。

これは、サービスの単体テストで、たとえばサービスが呼び出すリポジトリに依存するのと同じように、依存関係であると考えますか?

単純なことをテストできるようにするために、オブジェクトのクラスター全体を再作成しなければならないという問題をどのように解決しますか? この依存関係を壊して、テストで不要な Book 属性をすべて取り除くにはどうすればよいでしょうか? モックまたはスタブを使用して?

リポジトリに含まれるものをモックアップする場合、テスト対象のオブジェクトが通信または消費するものをモックアップするときとは対照的に、どの種類のモック/スタブを使用しますか?

0 投票する
1 に答える
1459 参照

asp.net-mvc - ASP.NET MVC 2:編集フォームの注文/注文ラインの背後にあるメカニズム

IList<OrderLine>この質問では、MVC2編集フォームでを処理するためのリンク/コードを探しています。具体的には、完全な注文をクライアントに送信してから、

Html.EditorFor(m => m.orderlines [i])(orderlinesは列挙可能なオブジェクト)を使用して、編集した注文をオブジェクトにポストバックする(永続化する)ことに関心があります。

複数の注文明細(2つのテーブル、OrderとOrderLine、1対多)を持つ注文を編集することは明らかに困難です。 エンティティと関連エンティティを単一のフォーム(C#MVC 2)で編集するこのフォームを作成する方法をアドバイスするリンク/例/パターンはありますか?

IListは本当に私をループに投げ込んでいます。(1つの注文を編集するための1つのフォームがまだある間に)そこにあるべきですか?フォーム全体をサーバーにポストバックせずに、サーバー側のファクトリを使用してフォームに空白のOrderLineを作成するにはどうすればよいですか?個々の注文行を個別の保存ボタンや削除などで処理しないことを望んでいます(たとえば、注文を開いてすべての行を削除し、[キャンセル]をクリックすると、注文自体が変更されることはありません。リポジトリまたはデータベースのいずれか。

クラスの例: