2010-12-27 9 views
0

Dies ist eine zweiteilige Frage, hier ist die Situation:iphone Kerndaten und Entität Vererbung

Ich habe eine App, die eine Reihe von Produktmodellen auflistet. Der Benutzer sollte in der Lage sein, aus dieser Liste die Produktmodelle auszuwählen, die er speziell besitzt. Sie können mehr als 1 desselben Produkttyps besitzen und außerdem einen benutzerdefinierten Namen für die Produkte festlegen können, die sie besitzen. Also habe ich mein Datenmodell mit zwei Entitäten eingerichtet. Produkt und OwnedProduct. OwnedProduct erbt von der Product-Entität und fügt eine customName-Eigenschaft hinzu.

Frage 1: Ist dies der beste Weg, um das Modell zu implementieren oder sollte ich etwas mit Beziehungen tun? Im Moment habe ich keine Beziehungen an Ort und Stelle.

Bei der nächsten Frage wird tatsächlich ein OwnedProduct-Datensatz aus einem der Produkte erstellt, die vom Benutzer ausgewählt wurden.

Frage 2: Gibt es eine Möglichkeit, das ausgewählte Product-Objekt zu übernehmen, es zu duplizieren und dann als OwnedProduct zu übertragen? Oder müsste ich eine brandneue Instanz von OwnedProduct erstellen und dann manuell alle Eigenschaften von den Eigenschaften der Produktinstanz zuweisen?

Antwort

2

Frage 1: Ist dies der beste Weg, das Modell zu implementieren, oder sollte ich etwas mit Beziehungen tun? Im Moment habe ich keine Beziehungen an Ort und Stelle.

Haben Sie mehrere Besitzer im selben Kontext?

Kann ein einzelnes Produkt von verschiedenen Besitzern mit unterschiedlichen benutzerdefinierten Namen besessen werden?

Wenn ja, würde ich mir die Beziehungen ansehen. Ich würde ein Produkt wegen eines Besitzes nicht duplizieren. Wenn sich das Produkt ändert, sollte es sich wahrscheinlich für alle Besitzer ändern.

Ein mögliches Datenmodell für Ihre Anforderungen: product ownership datamodel, three entities: Product, ProductOwnership and Owner

Frage 2: Gibt es eine Möglichkeit, das ausgewählte Produkt Objekt zu nehmen, vervielfältigen, und es dann als OwnedProduct zu werfen? Oder müsste ich eine brandneue Instanz von OwnedProduct erstellen und dann manuell alle Eigenschaften von den Eigenschaften der Produktinstanz zuweisen?

Da der Klon eine separate Instanz in Ihrem Kontext sein wird, müssen Sie eine neue Instanz erstellen und alle erforderlichen Eigenschaften kopieren. Sie können die Vorgänge beschleunigen, indem Sie über NSEntityDescription-Eigenschaften und -Beziehungen iterieren. Es gibt bereits eine solution zum Klonen von NSManagedObjects auf SO

+0

Eigentlich ist dies eine Einzelbenutzeranwendung, so dass es nicht mehrere Besitzer geben wird. Würde dies deine Antwort ändern? Ich glaube auch nicht, dass die "Betrag" -Eigenschaft funktionieren würde, weil jedes einzelne Produkt einen benutzerdefinierten Namen haben sollte. Danke, dass Sie ein Diagramm eingefügt haben. –

+0

Ich stimme Martin zu, dass OwnedProduct eine Beziehung mit Produkt ** statt ** von OwnedProduct haben sollte, das eine Unterklasse/Erweiterung des Produkts ist. Design ruft ein einzelnes Produkt auf, das mehreren OwnedProducts zugeordnet ist. Wenn also kein Eigentümer benötigt wird, besteht die Beziehung zwischen mehreren Partnern aus Produkt und OwnedProduct. – westsider

+0

Angesichts der zusätzlichen Informationen würde ich meine Empfehlung ändern. Ihre Anwendung enthält ein vordefiniertes Produkt, aber sobald der Benutzer das Eigentum an einem Produkt übernimmt, sollten diese beiden Produkte nicht mehr verbunden sein, sondern unabhängig voneinander bearbeitet werden können.In meinem Datamodell können Sie für mehrere Eigentümer eines Produkts leicht verschiedene ProductOwnership-Objekte erstellen, um verschiedene benutzerdefinierte Namen zuzuweisen –

Verwandte Themen