I described Value Object as a small object such as a Money or date range object. Their key property is that they follow value semantics rather than reference semantics.
You can usually tell them because their notion of equality isn't based on identity, instead two value objects are equal if all their fields are equal. Although all fields are equal, you don't need to compare all fields if a subset is unique - for example currency codes for currency objects are enough to test equality.
A general heuristic is that value objects should be entirely immutable. If you want to change a value object you should replace the object with a new one and not be allowed to update the values of the value object itself -
平等の観念はアイデンティティーに基づかず、貨幣の対象についてその指標が平等性を確かめるのに十分であるように、代わりに2つの価値対象は同じ条件下であれば、平等となるため、たいていはそのことを伝えることができます。
一般的な発見的教授法では、価値対象が完全に普遍であるべきです。価値対象を変えたいのであれば、対象を新しいものにし、価値対象自体の価値を更新すべきではありません。
それら(オブジェクト)が等しいかどうかの概念は id ではなく、2つのオブジェクトの持つ全てのフィールド値が等しいかどうかで判断できる。すべてのフィールドが等しい場合でも、すべてのフィールドのサブセットが一意である場合はすべてのフィールドを比較する必要はない - 例えば通貨オブジェクトの通貨コードは、等価性をテストするのに十分である。
一般的な解決法は、Value Object がイミュータブル(完全に不変)でなければならないことである。
Value Object を変更した場合、そのオブジェクトを新しいオブジェクトで置き換える必要があり、それらValue Object の値を書き換えてはならない。
updatable value objects lead to aliasing problems.
Early J2EE literature used the term value object to describe a different notion, what I call a Data Transfer Object. They have since changed their usage and use the term Transfer Object instead.
***
When you're working with a remote interface, such as Remote Facade, each call to it is expensive. As a result you need to reduce the number of calls, and that means that you need to transfer more data with each call. One way to do this is to use lots of parameters. However, this is often awkward to program - indeed, it's often impossible with languages such as Java that return only a single value.
初期のJ2EEの文学は、Data Transfer Objectと呼んでいる異なる観念を描写すべく、価値対象という言葉を使用した。それから使用方法が変わり、代わりにTransfer Objectという言葉が用いられた。
***
Remote Facadeといったリモート・インターフェースを使っているなら、どちらの呼び方も値打ちがある。結果として、呼び名の数を減らす必要があり、それぞれでたくさんのデータを移送する必要があるということだ。これをするには、たくさんのパラメーターが必要だ。しかし、これはしばしばプログラミングには適さない。実際、1つの価値しか呼びこまないJavaのような言語にはよく不可能となる。
初期のJ2EEは、私が Data Transfer Object と呼ぶ他の概念を表現するために Value Object という用語を使用していた。彼らは以来、その使用法を変更し、代わりに Transfer Object という用語を使うようになった。
***
あなたが Remote Facade のようなリモートインタフェースを使用する際、それらの呼び出しは高コストである。結果として呼び出し回数を減らす必要があり、それは各呼び出しでより多くのデータを送信する必要があることを意味する。これを行う1つの方法は、多くのパラメータを使用することである。
しかし、これは多くの場合、プログラムするのが厄介になる - 確かに、それはしばしば、単一の値を返すJavaなどの言語では不可能である。
こちらで使わせていただきました。
http://matome.naver.jp/odai/2135704630965149401/edit?join=true