2
EvansのプロジェクトをサンプルDDDプロジェクトで見ているうちに、Cargo
エンティティではEvanが値オブジェクトであるtracknumberを使用しています。なぜ彼は平文を選択しなかったのですか?string tracknumber
ではなく、identityの値オブジェクトを選択しますか?ここエヴァンスからの抜粋です:値オブジェクトをエンティティ内の識別子として使用する
public class Cargo implements Entity<Cargo> {
private TrackingId trackingId
}
public final class TrackingId implements ValueObject<TrackingId> {
private String id;
/**
* Constructor.
*
* @param id Id string.
*/
public TrackingId(final String id) {
Validate.notNull(id);
this.id = id;
}
我々は同じことを実現することができます.Netの世界では、readonly変数はコンストラクタを介してのみ設定され、後で変更することはできません。 – kamal
確かですが、ロジックはTrackingIdではなくCargoオブジェクトに存在します。私が作ったのは、Value ObjectのアプローチがTracking Id自体のロジックをカプセル化している点です。 @kamal。 – David
。 TrackingIdは、Cargoオブジェクトが必要としないか、知りたいと思うその他の有用なことを行うこともできます。たとえば、顧客の問い合わせでフォーマットしたり、次の利用可能なID番号を割り当てたり、存在を正当化する以上のトリッキーなロジック。乾杯 – Berryl