Frage

Ich habe ein Domain-Objekt in einer Identitätskarte verwendet (die Tasten sind das Id Eigenschaft des Objekts).

Pseudocode:

map = new Mapping();
map[domainObj.Id] = 'foo';

Ich beobachte das Objekt, mir zu sagen, wenn es in der Datenbank gespeichert wurde:

domainObj.bind('saved', function() {
    map[domainObj.Id] = 'new foo!'
})

Für neue Objekte des Id Feld leer ist und nicht aufgefüllt, bis sie in die Datenbank gespeichert wird.

Und darin liegt mein Problem. Im Falle von neuen Objekten, schlägt der Nachschlag „map[domainObj.Id]“, weil die Identität nach hat das Objekt geändert gespeichert werden!

Was ist der beste Weg, um ein Objekt in einer Identitätskarte wie diese zu benutzen?

Constraints :

  1. Ich verwende eine Sprache, die in einem Mapping-Objekte als Schlüssel erlaubt [JavaScript]
  2. nicht
  3. Das Id Feld muss auf dem Server erzeugt werden, wenn ein neues Objekt Speicher

Aktualisieren

Danke für das Feedback. Ich möchte wirklich an Wert Objekte haben die gleiche Art und Weise wie diese Einheiten zugeordnet: nur weil der Wert Objekt nicht gespeichert wurde, bedeutet nicht, es hat keinen Wert für meine Anwendung abzubilden. Ich bin in der Tat falsch zu verstehen, was eine Identitätskarte (was nach der Musterdefinition erneut zu lesen, es stellt sich heraus, ich bin nicht wirklich verwendet wird).

Die Lösung kam ich mit so ziemlich direkt von Igor Antwort: Jedes Objekt erhält eine zufällige ID, um es bei der Instanziierung zugewiesen. Es ist einzigartig, unveränderlich und unveränderlich während der Lebensdauer des Kontextes, in dem das Objekt lebt. Es ist dort für beide Objekte aus der db und neue Instanziierungen. Der Tweak für Unternehmen ist, dass sie gesetzt, um die wahre Identität des Objekts entsprechen. Dies macht das Debuggen ein wenig einfacher. Dies ist der Wert, den ich als Schlüssel bei der Abbildung verwendet werden.

War es hilfreich?

Lösung

Bis ein Objekt die Identität bekommt, es ist nur ein Wertobjekt . Erst nachdem die Identität festgestellt wurde, wird es ein Unternehmen .

, bis das Objekt wird ein Objekt, das Sie nicht wirklich in einer Identitätskarte wie das Ihre setzen können - es macht keinen Sinn, da Sie sie nicht ziehen können aus (da Sie es keinen eindeutigen Schlüssel zu finden) <. / p>

Ein möglicher Ansatz:

  1. Hinzufügen einer Markierung zu der Klasse, die den Zustand des Objekts anzeigt (neu / gespeichert).
  2. Implementieren Sie eine temporäre (Client-Seite) ID für diese Objekte
  3. Optional:
    1. halten "neue" Objekte in einer getrennt Identitätskarte (wenn Sie auf kann nicht ID Konflikte zwischen Client und Server-IDs vermeiden)
    2. halten "neue" Objekte in der gleichen Identitätskarte (wenn Sie auf können ID Konflikte zwischen Client und Server-IDs vermeiden)
  4. Sobald das Objekt gespeichert wurde, die Client-ID mit dem Server-ID ersetzen, um den Zustand gespeichert gesetzt, auf die Hauptidentitätskarte verschieben (falls erforderlich).

Sehen Sie sich hier über die Entitäten vs. Wertobjekte

Andere Tipps

Nun, haben Sie eine Möglichkeit, das Objekt auf die Karte zu verschieben finden müssen, um das Hinzufügen, bis nach es gespeichert wurde und eine ID zugewiesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top