問題タブ [domain-model]
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.
asp.net-mvc - ベストプラクティス - ビュー モデルとドメイン モデルの混合
ビュー モデルとドメイン モデルを混在させることは合理的ですか?
つまり、ビュー モデル オブジェクトにはいくつかのドメイン モデル オブジェクトが含まれます (その逆ではありません!)。
dto - ドメイン モデル内での DTO の受け渡し
DTO 型がドメイン モデル内で作成され、型間で受け渡されていることがわかります。これは良い習慣ですか?
私は常に、DTO は主にコンテキスト境界 (オブジェクト グラフの端) で使用され、コンテキスト実装を分離する (ドメイン/UI 境界など) と考えていました。
primary-key - ドメイン モデル クラスに無意味なキーがあるのは悪いことですか?
ドメインモデルを作成するとき、ほとんどの場合、データベース内の対応するテーブルの主キー列を表すエンティティの Id フィールドまたはプロパティがあります。私の質問は、ドメイン モデルとは関係のないこのキー プロパティがある場合 (つまり、これは単なるデータベースの問題です。Martin Fowler は意味のないキーと名付けることを好みます)、永続化レイヤーがドメインにリークしているのでしょうか? もしそうなら、どうすればそれを防ぐことができますか?
dependency-injection - ドメイン モデルへの依存性注入の手法
ドメイン モデル タイプがあります。その多数のプロパティの 1 つは、戻り値を適切な言語に翻訳する機能を提供するために ITranslationService を必要とします。
ITranslationService をドメイン モデル型のコンストラクターに挿入する必要があります (そのため、型がインスタンス化されるすべての場所を変更する必要があり、NhIbernate を介して取得するときに初期化を考慮する必要があります)。多くのプロパティの); または、使用できる別の機能パターンはありますか?
誰かが共有できる関連する経験を持っていますか?
java - モデルの分離と入力チェック
入力チェックをモデルから切り離し、他の場所、たとえばコントローラーで処理するのは良い習慣ですか?もしそうなら、MVCまたはDDDの観点からこれをどのように行うことができますか?
winforms - InvokeRequired を使用しないマルチスレッド シナリオでのビジネス オブジェクトへの Winforms データ バインディング?
たとえば、ビジネス オブジェクトがありますPerson
。
そして、このクラスのオブジェクトにデータ バインドされた Winforms UI コントロールがいくつかあります。
現在、変更を行っていますが、実装somePerson
したおかげでINotifyPropertyChanged
、それらの変更が UI に反映されています。ここまでは順調ですね。
ここで私の問題:ワーカー スレッド (つまり、UI スレッドではない) に変更を加えるとsomePerson
、たとえばバックグラウンド操作として DB からデータをロードしているために、データ バインディングが更新を試みるため、例外が発生する可能性があります。コントロールは、UI スレッドでのみ発生することが許可されています。
これは、UI 要素を呼び出して、ビジネス オブジェクトを更新できるかどうかを確認する必要があることを意味します。これは、アプリケーションの論理階層化に違反しInvokeRequired
ているように思えます。
理想的には、ビジネス オブジェクトが UI にデータ バインドされているかどうかを気にせずに、ビジネス オブジェクトを変更できるようにしたいと考えています。これは、Winforms のデータ バインディングで何らかの形で可能ですか?
nhibernate - ドメイン モデリングの質問 / NHibernate を使用したコレクション
以下に示すドメイン モデルを検討してください (簡潔にするために簡略化されています - ID などはありません)。Aは一度だけCustomer
コメントできProduct
ます。Customer
クラスが所有する s のコレクションを持つことができないと仮定しましょう (ここには入りたくない理由があります) Review
。これProduct
がメインの集約ルートです。
多くの場合、この状況では、 を取得するときProduct
に、特定の のコンテキストでのみ取得されますCustomer
。Reviews
つまり、その特定の に属するコレクションのメンバーのみに関心がありCustomer
ます。
では、オブジェクトを取得するときProduct
に、コレクションの人口をCustomer
私が提供するレビューに制限する方法はありますか? これはNHibernateでどのように実装されますか? これは NHibernate のベスト プラクティス (および程度の低い DDD) とまったく一致していますか?
ありがとう
c# - オブジェクトをモデル化して機器/資産を経時的に追跡するにはどうすればよいですか?
このエンティティをモデル化する最善の方法を見つけようとしていますが、行き詰っています。基本的なユースケース/ストーリーは次のとおりです。
機材が現場に到着。どんな機材かは、届くまでわかりません。機器が現場に到着したら、到着したこと、およびアイドル状態かアクティブ状態かを記録する必要があります。アクティブな場合、ユーザーは機器が実行した作業を記録する必要があります。機器がサイトを離れるときは、これに注意する必要があります。
サイトに機器があるかどうか、以前にサイトにあった機器などを簡単に照会できる必要があります。
私は日付の面で立ち往生しています。特定の日にアイドル状態とマークされていない場合、cronジョブを実行して機器をアイドル状態としてマークすることに頼らないようにしています。これを行う方法が必要なように感じます。これが私が思いついたものです:
アイデアは、Site.Equipment.Where(x=>x.Departure == null)
どの機器がまだ現場にあるかを確認するようなクエリを実行できるということです。特定の日付に EquipmentUtilization がない場合は、アイドル状態であると見なされます。次に、DateTimeEnumerator をセットアップできます。
到着日から DateTime.Now または DepatureDate (null でない場合) までの日付のリストを作成します。何らかの理由で、これは醜いようです。DateTime 列挙子を Equipment オブジェクトの内部に配置する必要がありますか? これはすべて一緒にするか、別の方法で行う必要があるように感じますが、実行すると機能します。提案?
asp.net-mvc-2 - ASP.NET MVC 2: 2 つのオブジェクトをテンプレートに渡す方法はありますか?
この例の「ルックアップ」IList<string>
は州の略語です。通常、ドメイン モデル POCO にはこれらのオプションは含まれません。ViewModel は通常、元のドメイン モデルと Lookup オブジェクトの両方を参照してこの責任を負いますが、ドメイン モデルがネストされていて、MVC テンプレートを使用している場合はどうなりますか (元のモデルのルート プロパティにアクセスできないでしょうか?
テンプレートの 1 つのオブジェクトにルックアップを含め、別のオブジェクトにモデルを含める方法はありますか? ビュー内のそのテンプレートに固有のビューモデルをオンザフライでアセンブルすることは許可されていますか (そこからネストされたデータを含める必要があります)。ルックアップ値をプルダウンする静的メソッドは悪いと思います。
何か案は?
注(私の知る限り):
リポジトリのドメイン モデル POCO の構造は変わりません。たとえば、1 つのモデルに Customer オブジェクトと米国州の DDL オプションの両方が必要な場合、通常、Customer オブジェクトと Customer Lookup リストを参照する ViewModel があります。
ただし、ネストされたドメイン モデル (集約ルート) がある場合、ネストされたオブジェクトにはルックアップ リストを配置する場所がなく、MVC テンプレートはルート レベルのビュー モデル (ビュー モデルは部分モデル) にアクセスできません。
編集:
ViewModel のルート レベルに DDL リストを配置し、Customer オブジェクトに到達したら、ルート レベルの DDL リストと現在の Customer オブジェクトを参照してテンプレートに送信する新しい ViewModel を作成する方法はありますか? これにより、モデル内の重複データが排除され、すべてのビューに対して単一のモデルが使用されます。唯一の悪い点は、ビュー内のコントローラーのようなデータ アセンブリ コードです (これも同様に悪いことです)。