Von den beiden ist meine Präferenz die erste Methode:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
Der Grund dafür ist, dass Änderungen an beiden Objekten auf der Straße vorgenommen werden. Solange die Änderungen diese Getter bewahren, sodass die Änderung außerhalb des Objekts transparent ist, müssen Sie weniger Code ändern und testen und haben weniger Chancen, die App zu stören.
Dies ist nur mein Denkprozess, der hauptsächlich darauf beruht, wie ich solche Dinge gerne bearbeite und strukturiere und was sich auf lange Sicht als ziemlich überschaubar und wartbar herausstellt.
Ich werde nicht auf Namenskonventionen eingehen, sondern darauf hinweisen, dass dieser Speichermechanismus sich später ändern kann, obwohl in dieser Methode das Wort "Datenbank" vorkommt. Aus dem gezeigten Code geht hervor, dass die Funktion nicht an die verwendete Datenbankspeicherplattform gebunden ist - oder auch wenn es sich um eine Datenbank handelt. Wir haben nur angenommen, weil es im Namen ist. Unter der Annahme, dass diese Getter immer erhalten bleiben, wird es wiederum einfach sein, zu ändern, wie / wo diese Objekte gespeichert werden.
Ich würde die Funktion und die beiden Objekte jedoch überdenken, da Sie eine Funktion haben, die von zwei Objektstrukturen abhängig ist, insbesondere von den verwendeten Gettern. Es sieht auch so aus, als ob diese Funktion diese beiden Objekte zu einer kumulativen Sache zusammenfügt, die beibehalten wird. Mein Bauch sagt mir, dass ein dritter Gegenstand Sinn machen könnte. Ich müsste mehr über diese Objekte wissen und wie sie sich auf die Realität und die erwartete Roadmap beziehen. Aber mein Bauch neigt sich in diese Richtung.
Nach dem derzeitigen Stand des Codes lautet die Frage: "Wo würde oder sollte diese Funktion sein?" Gehört es zum Account oder zu OtherThing? Wohin geht es?
Ich denke, es gibt bereits eine dritte Objekt- "Datenbank", und ich neige dazu, diese Funktion in dieses Objekt einzufügen, und dann wird es zu einer Aufgabe dieses Objekts, in der Lage zu sein, mit einem Konto und einem anderen Objekt umzugehen, das Ergebnis umzuwandeln und es dann auch beizubehalten .
Umso besser, wenn Sie das dritte Objekt an ein ORM-Muster (Object Relational Mapping) anpassen. Das würde es für jeden, der mit dem Code arbeitet, sehr offensichtlich machen, zu verstehen, "Ah, hier werden Account und OtherThing zusammengeschlagen und bestehen".
Es könnte aber auch sinnvoll sein, ein viertes Objekt einzuführen, das die Aufgabe des Kombinierens und Transformierens eines Accounts und eines OtherThing übernimmt, jedoch nicht die Mechanismen des Bestehens. Das würde ich tun, wenn Sie mit viel mehr Interaktionen mit oder zwischen diesen beiden Objekten rechnen, da ich dann die Persistenzbits in ein Objekt zerlegen möchte, das nur die Persistenz verwaltet.
Ich würde dafür fotografieren, dass das Design so bleibt, dass das Konto, OtherThing oder das dritte ORM-Objekt geändert werden kann, ohne dass auch die anderen drei geändert werden müssen. Wenn es keinen guten Grund dafür gibt, möchte ich, dass Account und OtherThing unabhängig sind und nicht die inneren Abläufe und Strukturen voneinander kennen.
Wenn ich den vollständigen Kontext wüsste, könnte ich natürlich meine Ideen komplett ändern. Wiederum denke ich so, wenn ich solche Dinge sehe, und wie schlank.