Spośród nich preferuję pierwszą metodę:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
Powodem jest to, że zmiany dokonane w dowolnym obiekcie w dół drogi, o ile zmiany zachowują te pobierające, więc zmiana jest przezroczysta na zewnątrz obiektu, masz mniej kodu do zmiany i przetestowania oraz mniejsze prawdopodobieństwo zakłócenia działania aplikacji.
To tylko mój proces myślowy, oparty głównie na tym, jak lubię pracować i konstruować rzeczy tego rodzaju i które na dłuższą metę okazują się łatwe do zarządzania i konserwacji.
Nie zamierzam wdawać się w konwencje nazewnictwa, ale zwrócę uwagę, że chociaż w tej metodzie jest słowo „baza danych”, ten mechanizm przechowywania może się zmienić. Z pokazanego kodu nic nie wiąże tej funkcji z używaną platformą do przechowywania baz danych - a nawet jeśli jest to baza danych. Po prostu założyliśmy, ponieważ jest w nazwie. Ponownie, zakładając, że te pobierające są zawsze zachowane, zmiana sposobu / miejsca przechowywania tych obiektów będzie łatwa.
Chciałbym jednak ponownie przemyśleć funkcję i dwa obiekty, ponieważ masz funkcję, która jest zależna od dwóch struktur obiektów, a konkretnie zastosowanych modułów pobierających. Wygląda również na to, że ta funkcja wiąże te dwa obiekty w jedną kumulatywną rzecz, która się utrwala. Moje wnętrzności mówią mi, że trzeci obiekt może mieć sens. Musiałbym dowiedzieć się więcej o tych obiektach i ich związku w rzeczywistości i przewidywanej mapie drogowej. Ale moje jelita pochylają się w tym kierunku.
W obecnym stanie kodu pojawia się pytanie „Gdzie powinna lub powinna być ta funkcja?” Czy jest to część konta, czy innego? Dokąd to zmierza?
Wydaje mi się, że istnieje już „baza danych” trzeciego obiektu, a ja skłaniam się ku umieszczeniu tej funkcji w tym obiekcie, a potem staje się zadaniem tych obiektów, aby móc obsługiwać konto i inny element, przekształcić, a następnie zachować wynik .
Jeśli posuniesz się tak daleko, aby ten trzeci obiekt był zgodny ze wzorcem mapowania relacyjno-obiektowego (ORM), tym lepiej. Byłoby to bardzo oczywiste dla każdego, kto pracuje z kodem, aby zrozumieć „Ach, tutaj konto i OtherThing zostają zmiażdżone i trwają”.
Ale może również mieć sens wprowadzenie czwartego obiektu, który obsługuje zadanie łączenia i przekształcania konta i innego elementu, ale nie obsługuje mechaniki utrzymywania się. Zrobiłbym to, jeśli przewidujesz znacznie więcej interakcji z tymi dwoma obiektami lub między nimi, ponieważ w tym czasie chciałbym, aby bity trwałości zostały rozłożone na obiekt, który zarządza tylko trwałością.
Zrobiłbym zdjęcia, aby zachować projekt w taki sposób, aby dowolne konto, inny obiekt lub trzeci obiekt ORM można było zmienić bez konieczności zmiany pozostałych trzech. Chyba że istnieje dobry powód, aby tego nie robić, chciałbym, aby Account i OtherThing były niezależne i nie musiały znać się od siebie nawzajem.
Oczywiście, gdybym wiedział, że tak będzie w pełnym kontekście, mógłbym całkowicie zmienić swoje pomysły. Znowu tak właśnie myślę, kiedy widzę takie rzeczy i jak szczupły.