2016-09-22 6 views
4

Ich habe folgende Situation:So definieren Sie eine gute Repository-Schnittstelle

Ich sammle Daten auf Hosts. Jeder Host verfügt über Sammlungen von Eigenschaften und Status. und die Hosts sind in Gruppen gesammelt.

Jede Gruppe hat eine eindeutige ID und jeder Host hat eine eindeutige ID

und alle Gruppen in einer einzigen „Repository“ gesammelt.

ich zur Zeit mit der folgenden Datenstruktur:

public class Host { 
    private final Map<PropertyId, Property> properties; 
    private final Map<StatusId, Status> statuses; 
} 

public class Group { 
    private final Map<HostId, Host> hosts; 
} 

public class AllGroups { 
    private final Map<GroupId, Group> groups; 
} 

Die derzeit als reguläres implementiert wird in Speicherdatenstruktur aber ich brauche das alles in einer Datenbank zu speichern. Ich möchte eine gute Abstraktion definieren, würde mir erlauben:

  • Um jedes Element zu lesen
  • zu aktualisieren erstellen und Eigenschaften löschen und Status
  • hinzuzufügen und zu löschen Hosts
  • Gruppen löschen

Ich las einige Beiträge bezüglich des Repository-Muster und es scheint angemessen, aber ich kann nicht herausfinden, wie Sie die Schnittstellen korrekt definieren

Sollte ich 1 Repository-Schnittstelle haben? Oder sollte ich separate Schnittstellen für HostRepository haben, PropertyRepository StatusReporitory ...

+1

Da "jede Gruppe eine eindeutige ID hat und jeder Host eine eindeutige ID hat", würde ich erwarten, ein "ID" -Feld in den Host- und Gruppenklassen zu sehen. –

+1

So etwas (https://losechies.com/jimmybogard/2009/09/03/ddd-repository-implementation-patterns/) ist eine Lektüre wert. Denken Sie daran, dass DDD Fowlers Muster annimmt und zusätzliche Nuancen hinzufügt. Z.B. Nur aggregierte Wurzeln sind über ein Repository verfügbar. –

Antwort

1

Sie können separate Repository-Schnittstellen haben, aber hier ist ein Ansatz mit nur einem.

Diese Klassen können problemlos in Tabellen (oder Dokumente in einer NoSQL-DB) umgewandelt werden.

+0

Danke. Was, wenn wir beim Speichern einer Eigenschaft auch die Knotenbeziehung angeben müssen. Die Eigenschaft wird zu einem Host hinzugefügt, der in einem Knoten vorhanden ist. Würden Sie so etwas tun? void saveProperty (NodeId nodeId, HostId hostId, Eigenschafteneigenschaft); –

+0

Wenn der Host der Eigenschaft mit demselben fraglichen Knoten verknüpft ist, benötigen Sie beim Speichern der Eigenschaft nur die ID des Hosts. Es wäre überflüssig, etwas anderes zu tun, da Sie den Knoten der Eigenschaft über seinen Host nachschlagen können. –

Verwandte Themen