2016-11-13 2 views
2

Ich habe ein Problem, dass ich nicht sicher bin, wie in Go zu lösen. Ich muss einen Klienten bilden, der mit einer json basierten API spricht.Mehrere Strukturen mit unterschiedlicher Zusammensetzung

Also dachte ich, dass ich Zusammensetzung verwenden würde, um die Struktur ähnlich wie unten zu bauen.

Jetzt würde ich die Datenstruktur an die API senden und die Antwort auf die Ergebnisse unmarshal, alles gut bis jetzt.

Jetzt ist das Problem, dass ich verschiedene Anforderungen zu senden haben, die eine andere "Ergebnisse" Zusammensetzung erfordern und daher viele Definitionen der Datenstruktur in demselben Paket haben müssten, was nicht gut ist.

Ich kämpfe um zu sehen, wie dies getan werden sollte. Irgendwelche Zeiger in einer Richtung werden groß.

+0

"müssen viele Definitionen der Datenstruktur im selben Paket haben, was nicht gut ist" ist eine Annahme. Lassen Sie diese Annahme einfach fallen und beginnen Sie mit der Codierung. – Volker

+0

Also sagst du, dass das in Ordnung ist? Ich kann das in keiner Dokumentation finden, die ich gelesen habe. Auch wenn es möglich ist, es zu tun, ist es der richtige Weg, um das Problem anzugehen, oder versuche ich, die ganze Sache zu machen. –

+0

Sind die "Ergebnisse", die Sie meinen, die Variable 'Result string' in Ihrer' Data' Struktur? Wenn ja, dann kannst du 'interface {}' als Datentyp von 'Result' verwenden. –

Antwort

0

Erstellen Sie keine Modellstruktur, die die API spiegelt oder imitiert, die Sie verwenden möchten. Entwerfen Sie Ihr Modell in einer Weise, die für Ihr Programm sinnvoll ist, z. B. auf einer hohen konzeptionellen Ebene, und SOLID principles auf Implementierungsebene.

Wahrscheinlich:

  • Sie brauchen nicht alle Funktionen des ausländischen API. Indem Sie sich zu sehr an ihre Strukturen halten, werden Sie eine Menge von Vorsätzen implementieren, die in Ihrem Programm keinen eigenen Zweck erfüllen.
  • Sie möchten nicht, dass Ihr Programm wegen geringfügiger Änderungen in der Fremd-API ausfällt.

eine Schicht in Ihrem Programm erstellen mit dem fremden API für die Kommunikation, und den Rest des Programms hängt von dieser Schicht, nie direkt auf dem fremden API machen. Auf diese Weise, wenn sich etwas in der API ändert, müssen Sie nur die Kommunikationsschicht ändern, der Rest des Programms kann weiterhin unbeeinflusst arbeiten.

Verwenden Sie in dieser Kommunikationsschicht alle Strukturen, die für die Kommunikation mit der API erforderlich sind. Verwenden Sie keine Strukturen, die nicht benötigt werden. Und konvertieren Sie diese Strukturen in die Strukturen, die im Rest Ihres Programms verwendet werden. Dies kann eine Menge manuelles Kopieren erfordern, das auf den ersten Blick nicht hübsch erscheint, aber es ist die Möglichkeit, Ihr Programm vor externen Änderungen zu schützen.

+0

Danke für die Links, die ich den Lesern geben werde, leider ist der einzige Zweck des Pakets zu sprechen Dieses Ziel ist es, effizient mit ihm zu kommunizieren und Strukturen zu übergeben, die andere nutzen können. –

Verwandte Themen