3

私は.NET / PHPのバックグラウンドを持つプログラマーです。

最近、 Flashbuilder 4 / ActionScriptに関するビデオ トレーニングをレビューしました。ビデオ トレーニングのビデオの 1 つは、 「値オブジェクトを使用したデータ モデルの作成」という名前です。「値オブジェクト」は私にとってなじみのない用語であり、「モデル」を意味するかどうかはよくわかりませんでしたが、「モデル」としてしか理解できないので少し混乱しましたが、タイトルは示唆しています値オブジェクトを使用してモデル作成していることは、それらが 2 つの異なるエンティティであることを示唆しています。

トレーナーは、これはJava ではかなり一般的な用語であり、「転送オブジェクト」と呼ばれることもあると言われました。実際、「値オブジェクト」のウィキペディアのページは「データ転送オブジェクト」にリダイレクトされ、このようなスタックオーバーフローの質問では、「値オブジェクト」は「 Java のマップされたオブジェクト」である可能性があると言及されています。

この用語の語源は何ですか? また、他のデータ モデル関連の用語とどのように関連していますか? それはJavaの世界から来て、ある時点で広く使われなくなったのですか?

4

2 に答える 2

2

この用語は、さまざまなコンテキストで過負荷になっているようです。Misko Heveryは、私が解釈するときにこの用語を説明しています。

Injectableクラスは、コンストラクターで他のInjectableを要求できます。(Injectablesをサービスオブジェクトと呼ぶこともありますが、その用語はオーバーロードされています。)[...] DIフレームワークから取得すると予想されるクラスの例を次に示します:CreditCardProcessor、MusicPlayer、MailSender、OfflineQueue。

同様に、Newablesはコンストラクターで他のNewablesを要求できますが、Injectablesは要求できません(NewablesをValue Objectと呼ぶこともありますが、この用語はオーバーロードされています)。Newablesの例としては、Eメール、MailMessage、User、CreditCard、Songなどがあります。この区別を維持すると、コードのテストと操作が簡単になります。このルールに違反すると、コードのテストが困難になります。

私が同意するもう1つの説明は、http://c2.com/cgi/wiki ?ValueObjectにある説明です。

値オブジェクトの例は、数値、日付、金銭、文字列などです。通常、それらは非常に広く使用されている小さなオブジェクトです。それらのアイデンティティは、オブジェクトのアイデンティティではなく、状態に基づいています。このようにして、同じ概念値オブジェクトの複数のコピーを持つことができます。

したがって、1998年1月16日の日付を表すオブジェクトの複数のコピーを持つことができます。これらのコピーはどれも互いに等しくなります。このような小さなオブジェクトの場合、日付を表すために単一のオブジェクトに依存するよりも、新しいオブジェクトを作成して移動する方が簡単なことがよくあります。

値オブジェクトは、Javaでは常に.equals()(またはSmalltalkでは=)をオーバーライドする必要があります。(.hashCode()もオーバーライドすることを忘れないでください。)

于 2010-10-13T06:46:44.160 に答える
2

私は Jazoon 2010 に参加し、Kevlin Henney が「オブジェクトの価値」について講演しました。このプレゼンテーション (価値オブジェクトを扱っています) を見る読むことを強くお勧めします。簡単に要約するには内容が多すぎますが、私の解釈は次のようになります。

値オブジェクト

モデル内の情報を表すオブジェクト。ID はなく、不変です。たとえば、2010 年 10 月 13 日の日付は、値オブジェクトとして表すことができます。ID はなく、2010 年 10 月 13 日は常に 2010 年 10 月 13 日であり、変更されることはありません。

機会があれば、ケブリンの話を直接聞くこともお勧めします。彼はとても上手な話し手だと思います。

また、Eric Evan の Domain Driven Design ブックもチェックしてみてください。これは、Java の世界における値オブジェクトの概念の現代的なソースであると私は信じています。

于 2010-10-13T07:00:53.253 に答える