4 Stimmen

Entwurfsmuster für Objekte in REST-APIs?

Ich habe eine REST-API mit der WCF-Web-API-Vorschau erstellt und möchte eine Bibliothek mit den Klassen erstellen, die Sie an diese API übergeben (nur um den .Net-Entwicklern das Leben zu erleichtern). Es sollten einfache POCO-Klassen ohne viel Funktionalität sein.

Aber auf der Empfängerseite wäre es für mich sinnvoll, diesen Klassen einige Funktionen hinzuzufügen. Ich habe ein Beispiel unten:

[WebInvoke(UriTemplate = "", Method = "POST")]
public Supertext.API.Order Create(Supertext.API.Order apiOrder)
{

Und dies ist ein Beispiel für eine POCO-Klasse:

public class Order
{
    public string Service { get; set; }

    public string OrderTitle { get; set; }

    public string Currency { get; set; }
}

Wie kann man diese Klasse nun auf der Serverseite erweitern?
Ich schätze, die Verwendung einer Unterklasse würde nicht funktionieren. Delegaten?
Haben Sie tatsächlich zwei verschiedene Versionen der Klasse? Eine für die Clients und eine für den Server?

Was machen andere Menschen?

2voto

Richard Blewett Punkte 6039

Das Problem beim Hinzufügen zusätzlicher Funktionen zu dieser POCO-Klasse ist, dass Sie sie in ein Domänenobjekt verwandeln. Die Beschaffenheit dieses Domänenobjekts wird nun durch die Tatsache eingeschränkt, dass diese Klasse im Wesentlichen als Definition der Schnittstelle zur Operation fungiert. Eine Änderung der Details dieser Klasse kann zu einem Bruch mit den Clients führen.

Es ist ein weitaus saubereres Modell, diese Klasse als reines Datenübertragungsobjekt beizubehalten, dessen einzige Aufgabe es ist, die Überbrückung des Drahtformats zu Objekten zu unterstützen, und einen Mapper wie AutoMapper um die Daten aus dem DTO auf ein echtes Domänenobjekt abzubilden. Das reale Domänenobjekt steht vollständig unter Ihrer Kontrolle, und Sie können es problemlos umgestalten, ohne dass ein Kaskadeneffekt für Ihre Dienstnutzer droht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X