2

集約ルート内のポリモーフィックな子エンティティを更新する最良の方法を見つけようとしています。参考までに、オブジェクトShippingContainerを格納するルート エンティティがあるとします。、など、Cargoさまざまな種類のCargoオブジェクトがあり、それぞれに固有のプロパティがあります。BigCargoHazardousCargo

私はこの質問を読んでいました: Update an entity inside an aggregate

この質問に対する答えは、ある種の DTO パラメータ オブジェクトを取得ChangeCargoするオブジェクトにメソッドを配置する必要があることを示しているようです。ShippingContainer私の質問は、更新しようとしているオブジェクトがポリモーフィックである場合に、これがまだベスト プラクティスであるかどうか (Cargo オブジェクト タイプをミラーリングする DTO オブジェクトの階層が必要ですか?)、または何か他のことを行う必要があるかどうかです。

4

1 に答える 1

2

ChangeCargo ユースケースが、変更したい貨物の特定のタイプを知っている場合、貨物タイプごとにこのメソッドの特定のバージョンが存在する可能性があります。

ただし、変更自体がカーゴ タイプに依存しない場合は、ポリモーフィズムを利用して各カーゴ サブタイプに更新を委譲するのが最善です。変更は、DTO、値オブジェクト、またはいくつかのパラメーターで表現できます。

例 (C#):

class ShippingContainer
{
    List<Cargo> cargos;

    public void ChangeCargo(string cargoId, DateTime expectedArrival, ...)
    {
        var cargo = this.cargos.FirstOrDefault(cargo => cargo.Id == cargoId);
        cargo.Change(expectedArrival, ...);
    }
}

class BigCargo : Cargo
{
    public void Change(DateTime expectedArrival, ...) { }
}

class HazardousCargo : Cargo
{
    public void Change(DateTime expectedArrival, ...) { }
}

で始まるパラメーターexpectedArrivalは、DTO または変更を最もよく表すものであれば何でもかまいません。

于 2013-01-25T18:35:42.833 に答える