私は自分のドメインオブジェクトにユビキタス言語を適用しようとしています。DTOをドメインオブジェクトに変換する方法
クライアントからのData Transfer Object
をドメインオブジェクトに変換したいと考えています。 Aggregate's Constructor
は必要なフィールドのみを受け付け、その他のパラメータはAggregate
が作成されている場合でも(CreateAggregate
command
)、aggregate's
API
を使用して渡す必要があります。
しかしDTO
Aggregate
へのマッピングコードは少し厄介になり:私は言及する必要があります
if(DTO.RegistrantType == 0){
registrantType = RegistrantType.Person()
}
elseif(DTO.RegistrantType == 1){
registrantType = RegistrantType.Company()
}
//.....
//.....
var aggregate = new Aggregate(
title,
weight,
registrantType,
route,
callNumber,
)
//look at this one:
if(DTO.connectionType == 0){
aggregate.Route(ConnectionType.InCity(cityId))
}
elseif(DTO.connectionType == 1){
aggregate.Route(ConnectionType.Intercity(DTO.originCityId,DTO.DestinationCityId)
}
//..........
//..........
ことの一つは、この問題は、ドメイン固有の問題はいないようだということです。私は私のdomain internals leakage
をせずに、そして集計(ないマッピングツール)は、それがビジネスルールだinvalideできる値を受け入れていないことを確認していると、ユビキタスを持つこれらのif-else文を減らすことができますどのように
言語が適用されますか?
私はAoutoMapper
を使ってこのトリックを行うことはできません。最後の部分は注意深くお読みください。
ありがとうございます。
あなたの答えは完璧ですが、 'RegistrantType.Person()'がenum値0を返し、 'RegistrantType.Company()'がこの特定のケースではenum値1を返します。その数字を集計に渡さなかったのは、ドメインの内部が漏れないようにするためでした。この特定のケースで工場を作成すると、工場は再び列挙型フラグとして数値を返します。それは暗黙の貧血モデルのように聞こえます。何か提案がありますか? – Mohsen