2009-03-26 2 views
0

Ich bin neu in diesem Repository Lerche, so dass einige Hilfe dankbar erhalten wird.Hilfe mit Repository (s) Methode

Ich versuche, eine Methode zu entwickeln, um eine zentrale Zahlungswebsite für alle unsere Seiten zu haben. Die Websites füllen eine Tabelle, die eine GUID zurückgibt. Alle Websites leiten die GUID an die zentrale Zahlungsseite weiter. Die zentrale Zahlungsstelle wird sich die Querystring ansehen und die GUID verwenden, um die Details bezüglich der Reihenfolge und der aufgerufenen Site abzurufen. Ich versuche, es flexibel zu machen, so die folgenden 1) Verschiedene Zahlungsanbieter können zu einem bestimmten Zeitpunkt (dh Paypal, Google Check) ohne größere hassel verwendet werden 2) Verschiedene DB (ORM) Schichten können verwendet werden (wir verwenden Unterschall im Moment, könnte aber LINQ usw.)

Ich bin mir nicht sicher, wie dies zu implementieren ist. Irgendwelche Vorschläge?

Dank

Podge

Antwort

0

zunächst eine Dienstschicht zu schaffen und dann benutzen Sie einfach eine Schnittstelle zu abstrahieren - würde mein Ausgang Vorschlag sein.

public interface IPaymentService 
{ 
    Guid PopulateTable(); 
    Order GetOrder(Guid id); 
} 

public class PayPalPaymentService : IPaymentService 
{ 
    public Guid PopulateTable() { ... } 
    public Order GetOrder(Guid id) { ... } 
} 

public class GooglePaymentService : IPaymentService 
{ 
    public Guid PopulateTable() { ... } 
    public Order GetOrder(Guid id) { ... } 
} 

Das nehme an, Sie könnten „Repository“ für „Service“ ersetzen, wie ich denke, das ist, was Sie nach, aber ich denke, Ihre Vorstellung von einem Repository ein bisschen anders ist.

ich ein Repository verwenden würde, um die Datenbank zu handhaben Abfrage ...

Das wäre eher wie:

T Get<T>(Guid id); 
IList<T> FindAll<T>(Guid fid); 

, die von PayPal und Google-Diensten verwendet werden würde (/ Repository).

+0

Danke für die Antwort, dies würde ein paar Fragen beantworten, die ich mit dem Repository habe.Im Netz scheint das Repository-Muster unterschiedlich zu sein. Vielleicht sollte ich das Repository-Muster verwenden, um die DB-Aktionen zu abstrahieren. Und dann übergeben Sie dies über die Service-Ebene? – Podge

+0

Ja, klingt, als hättest du es verstanden. Ich denke (vor allem, weil ich aus der Nomenklatur von SubSonic gekommen bin), dass es einfach einen Unterschied darin gibt, was Leute ein Repository nennen. Wenn Sie ein Repository implementieren möchten, starten Sie einfach mit TDD. Wenn es einfach zu testen ist, machst du es richtig. – rball

0

Zuerst betrachten, dass dies ein guter Ort ist, um begrenzten Kontext anzuwenden: http://dddcommunity.org/discussion/messageboardarchive/BoundedContext.html. Idealerweise sollten Sie keine unterschiedlichen (Sub-) Systeme über die Datenbank integrieren. Dies sollte auf der API-Ebene geschehen. Möglicherweise haben Sie es bereits so strukturiert, vorausgesetzt:

  • Die "Tabelle" alle Websites sind bevölkert ist nicht eine einzige gemeinsame Informationen für alle Websites. Es geht darum, dass jede Seite alle Informationen speichert, die sie über den Prozess benötigt, der gerade beginnt, und eine ID erhält, die dem Zahlungssystem übergeben wird.
  • Das Zahlungssystem sollte keine eindeutigen IDs über verschiedene Websites erzwingen. Es kann erzwingen, dass jede Website eine eindeutige ID in ihrem eigenen Kontext sendet.
  • Wenn das Zahlungssystem zusätzliche Informationen benötigt, sollte es auch auf API-Ebene erforderlich sein, anstatt eine db-Beziehung zwischen allen Websites und dem Zahlungssystem zu erzwingen.
  • Sie können veranlassen, dass die Websites eine API auf der Bezahlseite aufrufen, um den Bezahlvorgang zu starten und dann zur Website umzuleiten. Sie können entweder eine ID verwenden, die von jeder Website kontrolliert wird, oder eine allgemeine ID, die die Zahlungswebsite nach dem ersten Zahlungsanruf zurückgibt.

    In diesem Sinne würden die Repositories intern und unabhängig von den Websites und dem Zahlungsdienst verwendet werden, um Informationen zu erhalten. Dies bedeutet nicht notwendigerweise, dass es sich um eine Datenbank handeln muss, da Sie Informationen an anderen Orten/Mechanismen beibehalten können.

    Verwandte Themen