問題タブ [value-objects]
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.
domain-driven-design - ドメイン間で値オブジェクトを共有することは良い考えですか?
システムに Orderdomain と Customerdomain という 2 つのドメインがあるとします。
どちらのドメインもかなり複雑で大きいため、1 つのドメインに統合することはできません。
しかし、それらの間にはビジネス上の関係があります。各注文で、顧客は注文者として行動します。
私の頭の中には、少なくとも 3 つの解決策があります。
Order と Customer の両方で、customerId をプリミティブ型として格納します。
OrderDomain.CustomerId と CustomerDomain.CustomerId の 2 つの値オブジェクトを作成します。これらの型が等しいかどうかを比較できることを確認してください。
valeobject CustomerId を使用して 3 番目のコンポーネント「SharedValueObjects」を作成し、そのタイプを両方のドメインで使用します。
どちらが優先されますか、それとも 4 番目に優れたものを考え出すことができますか?
c# - 値オブジェクトのコレクションを使用したコンポーネントのマッピング
プロパティvalue object (component)
を含むものを (xml ベースのアプローチを使用して) マップするにはどうすればよいですか?ISet<String>
ありがとう!
php - PHP の値オブジェクトの例は何ですか?
値オブジェクトの C# の例をたくさん読んだことがありますが、値によって識別されるのは「オブジェクト」であることを理解しています。値が変更された場合、オブジェクトは「新規」です。
しかし、それはPHPに関しては意味がないようです...それか、私が接続していないだけです。
値オブジェクトは単なる文字列ですか?
database - データベースから Flex VO を生成する方法
内部に実際のデータを含むデータベースが既にあります。次に、その上に Flex-Java を構築します。私たちは、Hibernate ツールを使用してデータベースから Java コードを生成/リバース エンジニアリングする方法を知っています。問題は、VO アクション スクリプトをどのように生成するかです。Hibernate が DB から POJO を生成するように、アイデアは単純です。
注: Adobe のデータ モデル駆動型のアプローチを試しましたが、気に入りませんでした。
domain-driven-design - これらの値も値オブジェクトですか?
値オブジェクト(概念的なアイデンティティがなく、属性のセットがその定義など)とエンティティとの違いは理解していると思いますが、プリミティブ型( int、string ...)の値かどうかはまだわかりません。エンティティのプロパティに直接割り当てられていることもVOと見なされます。
たとえば、次のコードでは、に割り当てられた(タイプのName
)オブジェクトPerson.Name
はVOですが、に割り当てられた値でありPerson.FirstName
、VOPerson.LastName
とPerson.Age
見なされますか?
ありがとうございました
domain-driven-design - 次のモデルでは、アドレスは値オブジェクトであるべきではありませんか?
値オブジェクトはどのようにデータベースに保存されますか? :
Company と Person の両方が同じメール アドレスを持っているとします。これらのステートメントのうち、有効と考えるものはどれですか?
1.「Company.Address を変更した場合、Person.Address にそれらの変更を自動的に取得させたい」
2.「Company.Address を変更しても、Person.Address に影響を与えてはなりません」
1 が true の場合、Address はエンティティである必要があります
2 が true の場合、Address は値オブジェクトである必要があります。
上記のモデルでは、メールAddress
をValue ObjectCompany
にするべきではありませんか?同じメールがあったとしてもPerson
、このメールにはまだ概念的なアイデンティティがないからです。
つまり、最初にinitial.address@gmail.comCompany
をPerson
共有し、その後new.address@gmail.comで新しいメールを取得した場合、代わりにメール アドレス initial.address@gmail.com自体は変更されていないと主張できます。 new.address@gmail.comに置き換えましたか?Company
Person
したがって、私の理解では、共有されている単なる事実Address
は、それに個性 (つまりアイデンティティー) を与えるのに十分ではありませんか?!
ありがとうございました
domain-driven-design - 2つの並列集計、エンティティ、値オブジェクト階層のモデリング
私が理解しているように、DDDの概念に適合しない継ぎ目がある次のドメイン設計に苦労しています。
一方では、Device-> Sensor-> Measurement階層があり、ルートとしてDevice、エンティティとしてSensor、VOとしてMeasurementを使用したAggregateとしてモデル化されています。ここまでは順調ですね。
現在、センサーと同様に、各デバイスにはタイプがあります。同時に、測定値とは、測定された変数(温度など)を指します。ここで物事がバラバラになります。
最初は型を値オブジェクトとしてモデル化しましたが、型のセットは限られており、多くのデバイスとセンサーが同じ型を共有しています。
次に、デバイスの集合体と同様の構造に従って、それらを集合体としてモデル化することにしました:DeviceType->SensorType->Variable。ただし、SensorsがSensorTypeおよびMeasurement to Variableを参照する可能性があるため、これは機能せず、別のアグリゲート内からのアグリゲートのルートへの参照のみを許可するというルールに違反します。さらに、複数のDeviceTypeに同じタイプのセンサー(バッテリー充電センサーなど)が含まれている場合や、複数のセンサーが同じ変数(バッテリー充電レベルなど)を測定している場合もあります。
これにより、これらのエンティティ(DeviceType、SensorType、Variable)のそれぞれを、それぞれ独自の(縮退した)独立したエンティティとして持つことになります。
私の具体的な質問は、Aggregate、Entity、VOの概念を正しく解釈したか、またはルートのみがアンチパターンであるような貧血の集合体を持っているかということです。
c# - オブジェクトの状態を履歴リストに保存して復元するためのベスト プラクティスは何ですか?
次のシナリオがあります。
シリアルポートなどを介して一部のコンピューター外部デバイスと通信する MVVM アプリケーションを設計しています。すべてDevice
には、ID、名前などのいくつかのプロパティがあり、さらにModule
独自のプロパティを持つさまざまな で構成されています。デバイスを保存およびロードするための一種のxmlデータベースがあります。それぞれDevice
に独自のファイルがあります。ともかく:
アプリケーションは、すべてのファイルをリポジトリの種類ごとにロードし、Devices
実際に接続されているものを選択するためのリストを提供するか、新しいものを作成します。現在の を選択すると、デバイスのタイプに基づいたDevice
のリストを表すページが表示されます。Modules
すなわち:
Device_Type_A
Module_A
と_Module_B
Device_Type_B
Module_A
と_Module_C
...
のプロパティは、Modules
通信を介して入力されます。Modules
ここで、現在のデバイスの xml ファイルに、一種のモジュール状態履歴の状態を保存したいと考えています。
これを行うためのベストプラクティスは何ですか? Fowlers SnapshotModuleSnapshot
に基づいてクラスを作成して保存すると便利ですか? それとも、一種の不変値オブジェクトを作成してファイルに保存する必要がありますか?
デバイスはエンティティですが、モジュール履歴エントリは値オブジェクトのように感じます。読み込んだデバイスファイルの履歴も表示したい。Module
通信用のモデルとしてのクラスと、そのような不変値オブジェクトのコピー用のクラスが必要ModuleHistory
ですか?
このようなもの?
design-patterns - Dでの値オブジェクトパターンの実装
Dに値オブジェクトパターンを実装したい。つまり、不変オブジェクトへの可変参照変数が必要だ。T
変数は割り当て可能である必要がありますが、T
オブジェクトは決してその状態を変更してはなりません。
const
Dとの違いについて混乱しています。スケルトンクラスimmutable
で私の疑問を説明しましょう。Rational
と宣言する必要がnum
ありden
ますconst
かimmutable
?整数に違いはありますか?
invariant
またはとして宣言する必要がありますconst
かimmutable
?マークを付けるとimmutable
コンパイル時エラーが発生しますが、他のメンバーがマークされていないことが原因である可能性がありますimmutable
。
コンストラクターをまたはとして宣言する必要がありconst
ますimmutable
か?それはどういう意味ですか?
toString
またはとして宣言する必要がありますconst
かimmutable
?
個々のメンバーにマークを付ける代わりに、クラス全体にマークを付けることもできるようです。
これらのうち、値オブジェクトパターンに最も適しているのはどれですか?
どうpure
ですか?値オブジェクトパターンでは、メソッドに副作用がないようにする必要があるため、すべてのメンバーを次のように宣言するのは理にかなっていpure
ますか?残念ながら、純粋ではないため、としてマークを付けるとコンパイルtoString
されません。その特別な理由はありますか?pure
std.string.format
クラス自体をとして宣言することもできるようですが、コンパイラが不純な関数の呼び出しpure
について文句を言わなくなったため、効果がないようです。toString
そのときクラスを宣言するとはどういう意味pure
ですか?それは単に無視されますか?
domain-driven-design - DDDグローバル値オブジェクト
いくつかのオブジェクトでTimePeriod(AM、PM、NIGHTなど)参照が必要です。例えば。ScheduledMeeting、ActualMeeting。
TimePeriodはIDを使用してデータベースにありますが、変更されないため、エンティティではありません。また、「AM」期間はすべてのオブジェクトで同じです。
私の難しさは、データベースからこの値オブジェクトを取得する方法を知ることです。異なるオブジェクトがそれを参照できるので、それはそれらのリポジトリメソッドの一部であってはなりませんが、同時に、それはルートではないので、それ自身のリポジトリを持つべきではありません。
では、これをデータベースから取得することをどのように推奨しますか?
ありがとう。
アップデート
複数のグローバル値オブジェクトに対して複数の小さなリポジトリを設定するという考えはあまり好きではありませんが、期間はDBからリポジトリを介して戻ることができると彼が説明したので、私はeulerfxの答えを選びました。このエリアはまだ少し灰色に感じます。