問題タブ [domain-driven-design]

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 投票する
5 に答える
3233 参照

singleton - シングルトンとしての DDD リポジトリ?

簡単な質問: ドメイン駆動型のデザイン スタイルのリポジトリをシングルトンとして実装することは、良い考えですか、それとも悪い考えですか? なんで?

それとも、依存性インジェクター コンテナーを使用してリポジトリを管理し、それらがシングルトンかどうかを判断する必要がありますか?

私はまだDDD Quicklyを読んでいて、いくつかの良いリポジトリの例を見たいと思っています。

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

c# - このマッピングは (Fluent) NHibernate で実行できますか?

Web サイトのユーザーが行ったアクションを保存することを目的とした Events テーブルがあります。アクションは基本的に、テーブル X の新しい行を変更または作成します。これにより、ユーザーが実行したすべてのアクションの履歴を保存できます。そのため、イベントには以下が含まれます。

  • 主キー列
  • イベントを説明するテキスト (例: 「コメントを投稿しました」)
  • 必要に応じて識別子列
  • 別のテーブル A への外部キー列
  • 別のテーブル B への外部キー列
  • ....
  • 別のテーブル N への外部キー列

Events テーブルの行には、外部キー列が 1 つだけ設定され、その他はすべて null になります (したがって、すべて null 可能です)。テーブルは、イベントに関連する実際のテーブルに対する間接テーブルのように動作します。すべての情報が外部キー列に含まれているため、識別子が必要かどうかはわかりません。テーブル A ~ N は何でもかまいません。それらのドメイン モデル クラスは、必要に応じて共通のインターフェイスを持つことができます (IEventRecordable)。

私の質問は次のとおりです: Events テーブルと Event クラスの間でマッピングは可能ですか? 流暢なnhibernateで特に実現可能ですか? Event の派生クラスを多数作成せずに実行できますか (空のサブクラスを多数作成したくありません)。Event クラスは、理想的には次のようになります。

ドメイン モデル クラスの多くのクラスは、IEventRecordable (主に空のインターフェイス) を実装できます。User テーブルまたは BlogComment テーブルの可能性があります...

ありがとう

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

c# - 基本クラスが抽象で、識別子が文字列ではないクラス階層を使用した NHibernate マッピング

ドメイン モデル クラスは次のとおりです。

親クラスは抽象的であり、流暢な nhibernate でマップするときが来ると、これがいくつかの問題を引き起こすことに注意してください。私の識別子はバイトです(DBのtinyint)。これは文字列ではなく、基本クラスに識別子の値を設定できないため、これは機能しません (BaseClass のマッピング クラスから取得)。

私が得るエラーメッセージは次のとおりです。

クラスの初期化メソッド UnitTest1.MyClassInitialize が例外をスローしました。NHibernate.MappingException: NHibernate.MappingException: 識別子の値をエンティティ BaseClass の SQL 文字列にフォーマットできませんでした ---> System.FormatException: 入力文字列が正しい形式ではありませんでした..

次の投稿は、何が起こるかを説明しているようです。彼らはxmlで解決策を提供しますが、流暢なnhibernateでは解決しません: http://forum.hibernate.org/viewtopic.php?t=974225

助けてくれてありがとう。

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

asp.net - GridViewを複数のタイプのリストにバインドするにはどうすればよいですか?

このエラーが発生します:

System.Reflection.TargetException:オブジェクトがターゲットタイプと一致しません。

List<IEvent>IEventが予定、誕生日、またはその他のカレンダー関連のイベントタイプである可能性がある場所をバインドしようとする場合。

0 投票する
4 に答える
472 参照

code-generation - 最初にビジネスエンティティを作成し、次にデータベースを作成できる.NETフレームワーク

.NET Frameworkを使用すると、最初にビジネスエンティティを作成し、次にデータベースを作成できますか。つまり、後でデータベースに戻るためのDDD /PersistenceIgnoranceメソッドを使用できるようにします。作成したモデル/クラスがSQLDDLおよび移行スクリプトを生成できるようにするツール。

私の言い回しを自由に作り直して、より良い質問にしてください。

0 投票する
6 に答える
6208 参照

c# - 複雑な初期化を使用して不変オブジェクトを設計する方法

私はDDDについて学んでいて、「値オブジェクト」は不変でなければならないというステートメントに出くわしました。これは、オブジェクトの作成後にオブジェクトの状態が変更されないことを意味することを理解しています。これは私にとっては新しい考え方ですが、多くの場合、それは理にかなっています。

さて、不変の値オブジェクトの作成を開始します。

  • 状態全体をコンストラクターへのパラメーターとして受け取るようにします。
  • プロパティセッターは追加しませんが、
  • また、コンテンツを変更するメソッドが許可されていないことを確認してください(新しいインスタンスのみを返します)。

しかし、ここで、8つの異なる数値を含むこの値オブジェクトを作成したいと思います。8つの数値パラメーターを持つコンストラクターを作成すると、使い勝手が悪くなると思います。つまり、数値を渡すときに間違いを犯しやすくなります。これは良いデザインにはなり得ません。

したがって、質問は次のとおりです。不変オブジェクトを改善する他の方法はありますか。コンストラクターの長いパラメーターリストを克服するためにC#で実行できる魔法はありますか?私はあなたの考えを聞くことに非常に興味があります。

更新:誰かがそれについて言及する前に、1つのアイデアがここで議論されました: C#の不変オブジェクトパターン-あなたはどう思いますか?

ただし、他の提案やコメントを聞くことに興味があります。

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

domain-driven-design - ドメイン駆動設計は、単に仕様を使用するのとどう違うのですか?

ドメイン駆動設計とは、ソフトウェアに集中するのではなく、問題のドメインに集中することだと読みました。彼らは、ソフトウェアの複雑さよりも問題のドメインの複雑さを解決する方が簡単だと言います。ドメインを解決した後は、ソフトウェアの構築方法もよくわかるからです。また、実際にはソフトウェアの構造よりもドメインの方が複雑であるとか、森から森を見ないと大変なことになるとも言われています。

しかし、ドメイン駆動設計は、ソフトウェアの仕様を使用することとどう違うのでしょうか? もちろん、コーディングを始める前に、問題のドメインを知る必要があります。DDD は車輪の再発明ですか?

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

asp.net-mvc - 集約ルートではないエンティティを追加するための優先 URL は?

例: Order オブジェクト (集約ルート) には、OrderLine オブジェクト (子エンティティ) のコレクションがあります。OrderLine を Order に追加する URL は何ですか? 集約ルートのコントローラーを使用することと、子エンティティ用に別のコントローラーを使用することの違いを考慮してください。

1: http://example.com/orders/add-orderline?order-id=42&product-id=12&quantity=2

また

2: http://example.com/order-lines/add?order-id=42&product-id=12&quantity=2

ありがとう!

0 投票する
4 に答える
410 参照

c# - 特定のエンティティを異なるリポジトリに分割するのはいつですか?

私は通常、関連するすべてのエンティティを同じリポジトリに保持しようとします。以下は、2 つの間に関係があるエンティティです (インデントでマークされています)。

  • ユーザー
    • ユーザー設定

したがって、ユーザーリポジトリに移動するのは理にかなっています。ただし、ユーザーは多くの異なるエンティティにリンクされていることがよくあります。次の例ではどうしますか?

  • ユーザー

    • ユーザーの好み
    • 注文
  • 注文

    • 製品

注文は製品とユーザーの両方と関係がありますが、4 つのエンティティすべての機能を同じリポジトリに配置することはできません。ユーザー エンティティを処理し、注文情報を収集するときはどうしますか? 製品に関する追加情報が必要になる場合があり、多くの場合、ORM は遅延読み込み機能を提供します。ただし、製品エンティティがユーザー エンティティとは別のリポジトリにある場合、リポジトリ間で競合が発生することは確実でしょうか?

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

orm - エンティティと計算されたプロパティ

以下を実装するためのベスト プラクティスは何ですか。

  1. クラスがOrderあり OrderItem、親子として。
  2. クラス OrderItemはプロパティを提供しますCost
  3. OrdersList フォームで 、コレクションMaxCostから column = max(cost)を確認する必要がありますItems

ここで、DDD の概念を壊さない有用な解決策を 1 つだけ見つけました。それは、通常のプロパティMaxCostをクラスに追加しOrder、項目リストが更新されるたびに更新することです。

別の方法はありますか?