Каков наиболее элегантный способ сборки объекта HTTP JSON, состоящего из общих и специализированных частей? - PullRequest
0 голосов
/ 29 мая 2020

Это больше вопрос стиля, а не функциональности. В настоящее время я могу сгенерировать полезную нагрузку с помощью нескольких перекрывающихся условных операторов, но я чувствую, что должен быть лучший способ сделать это. свойства, которые должны быть заполнены для всех случаев, и свойства, которые необходимо заполнить только для определенных 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, встроенных в часть, которая устанавливает необязательные свойства.

Есть ли лучший способ сделать это с помощью полиморфизма и наследования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...