2016-11-13 2 views
2

У меня есть проблема, что я не уверен, как решить проблему в Go. Мне нужно сделать клиента, который разговаривает с api на основе json.Несколько структур с различным составом

Так что я думал, что буду использовать композицию для построения структуры, подобной приведенной ниже.

type (
    BaseData struct { 
     CommonFields string 
    } 

    Data struct { 
     BaseData 
     Result string 
    } 
) 

Теперь я хотел бы отправить-структуру данных в API и распаковать ответ на результаты, все хорошо до сих пор.

Теперь проблема заключается в том, что у меня есть разные запросы на отправку, для которых требуется другая композиция «результатов», и поэтому ей необходимо будет иметь множество определений структуры данных в одном пакете, что не является хорошим.

Я изо всех сил пытаюсь понять, как это должно быть сделано. Любые указатели в направлении будут большими.

+0

«Необходимо иметь много определений структуры данных в одном пакете, что не является хорошим» - это предположение. Просто снимите это предположение и начните кодирование. – Volker

+0

Так вы говорите, что это нормально? Я не могу найти это в любой документации, которую я прочитал. Даже если это возможно, это правильный способ решить проблему, или я пытаюсь выполнить всю квадратную привязку. –

+0

Являются ли «результаты», которые вы имеете в виду, это переменная 'Result string' в вашей структуре' Data'? если да, то вы можете использовать 'interface {}' как тип данных 'Result' –

ответ

0

Не создавайте структуру модели, которая отражает или имитирует API, который вы хотите использовать. Создайте свою модель таким образом, чтобы иметь смысл для вашей программы, после DDD principles на высоком концептуальном уровне, и SOLID principles на уровне реализации, например.

Скорее всего:

  • Вам не нужны все функции иностранного API. Соблюдая слишком много для своих структур, вы будете реализовывать множество шаблонов, которые не имеют никакой цели в своей программе.
  • Вы не хотите, чтобы ваша программа разбилась из-за незначительных изменений внешнего API.

Создайте слой в вашей программе для общения с иностранным API, и сделать отдых вашей программы зависит от этого слоя, никогда непосредственно на иностранном API. Таким образом, если что-то меняется в API, вам просто нужно изменить уровень связи, остальная часть программы может продолжать работать без изменений.

В этом слое связи используйте любые структуры, необходимые для связи с API. Не используйте какие-либо структуры, которые вам не нужны. И преобразуйте эти структуры в структуры, используемые в остальной части вашей программы. Это может быть связано с большим количеством ручного копирования, которое может показаться неважным сначала, , но это способ защитить вашу программу от внешних изменений.

+0

Спасибо за ссылки, которые я дам читателям, к сожалению, единственная цель пакета - поговорить с этот API, так что цель состоит в том, чтобы эффективно поговорить с ним и с каналами передачи, которые могут использовать другие. –