Это больше вопрос стиля, а не функциональности. В настоящее время я могу сгенерировать полезную нагрузку с помощью нескольких перекрывающихся условных операторов, но я чувствую, что должен быть лучший способ сделать это. свойства, которые должны быть заполнены для всех случаев, и свойства, которые необходимо заполнить только для определенных c случаев.
Block1
{
MandatoryProperty1,
MandatoryProperty2,
OptionalProperty1,
OptionalProperty2,
OptionalProperty3
}
Это более крупная структура с несколькими блоками, каждый из которых содержит несколько обязательных и дополнительных свойств . В настоящее время logi c строит это на основе интерфейса единого исходного объекта, имеющего несколько реализаций.
public RequestObject Map (ISourceObject sourceObject)
{
var implementedSourceObject = sourceObject as ImplementedSourceObject; // multiple implementations possible here
var result = JSONRequestObject();
result.Block1 = new Block1 {
MandatoryProperty1 = value;
MandatoryProperty2 = value;
OptionalPoperty1 = complexConditional based on implementedSourceObject props ? value1 : value2;
OptionalPoperty2 = complexConditional based on implementedSourceObject props ? value3 : value4;
....
}
result.Block2 = new Block2 {
MandatoryProperty1 = value;
MandatoryProperty2 = value;
OptionalPoperty1 = complexConditional based on implementedSourceObject props ? value1 : value2;
OptionalPoperty2 = complexConditional based on implementedSourceObject props ? value3 : value4;
....
}
return result;
}
Существует довольно много дублирования в различных реализациях ISourceObject и условных logi c, встроенных в часть, которая устанавливает необязательные свойства.
Есть ли лучший способ сделать это с помощью полиморфизма и наследования?