Gibt es objektive Argumente für oder gegen die Verwendung von Objekten gegen eindeutige ID als Methoden- / Funktionsparameter? (und Mitglieder anderer Objekte?). Speziell im Kontext statisch typisierter Sprachen (C # / Java / Scala)
Vorteile des Objekts selbst:
- Weitere typsichere Anrufe. Bei IDs besteht die Gefahr einer falschen Reihenfolge der Argumente. Dies kann jedoch gemindert werden, indem für jede Klasse eine 'Mini'-Klasse beibehalten wird, in der nur die ID dieser Klasse gespeichert ist.
- Holen Sie sich einmal aus Ausdauer, keine Notwendigkeit, wieder zu bekommen
- Wenn sich bei ID der ID-Typ ändert, z. B. int -> long, ist eine allgemeine Änderung mit der Möglichkeit von Fehlern erforderlich. (Courtsey: https://softwareengineering.stackexchange.com/a/284734/145808 )
Vorteile der Verwendung von ID:
- Meistens wird das eigentliche Objekt nicht benötigt, sondern nur eine eindeutige ID. Wenn Sie also eine ID haben, sparen Sie Zeit, wenn Sie es aus der Persistenz herausholen.
Eine Mischung dieser Techniken hätte, soweit ich sehen kann, nur Nachteile von beiden und Vorteile von beiden.
Da dies ein konkret definiertes Problem ist, hoffe ich, dass es objektive Antworten gibt und nicht die Typen "Ich denke" oder "Ich mag" ... :-).
BEARBEITEN: Kontext auf Vorschlag eines Kommentators - Die einzige Einschränkung sind statisch typisierte Sprachen. Die Anwendung ist eine Allzweckanwendung, freut sich jedoch über Antworten, die auch auf bestimmten Verwendungsszenarien basieren.
EDIT: Noch etwas Kontext. Angenommen, ich habe ein Buchverwaltungssystem. Mein Modell ist:
Book: { id: Int, isbn: String, donatedBy: Member, borrowedBy: Member }
Member: {id: Int, name: String}
Table- wishlist: { isbn: String, memberId: Int}
Table- borrows: { id: Int, memberId: Int}
Method:
isInWishList( book: Book, member: Member ) vs isInWishList( bookId: Int, memberId: Int)
handleBorrowRequest( memberId: Int, book: Book ){
//the login system doesn't actually get the entire member structure, only the member id. I don't need the full member yet. can run a query to verify that the memberId has less than max allowed books for borrowing.
}
Warum sollte ich nur den Ausweis und nicht das Vollmitglied behalten wollen? Wenn ich Informationen über ein Buch erhalte, muss ich selten wissen, wer es gespendet oder ausgeliehen hat. Es ist ein Overkill, die vollständigen Informationen zu erhalten, um die Felder "SpendedBy" und "BorrededBy" zu füllen.
Natürlich sind dies nur meine Punkte. Ich bin mir sicher, dass mir Dinge fehlen, also wollte ich wissen, was die Punkte dafür / dagegen sind.