З двох моїх переваг - перший метод:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
Причина полягає в тому, що зміни, внесені до будь-якого об’єкта вниз по дорозі, до тих пір, поки зміни зберігають ті, хто стає таким, щоб зміни були прозорими поза об'єктом, тоді у вас менше коду для зміни та тестування і менше шансів зірвати додаток.
Це лише мій процес мислення, в основному заснований на тому, як мені подобається працювати та структурувати речі такого характеру, які виявляються досить керованими та підтримуваними в довгостроковій перспективі.
Я не збираюся вступати в конвенції про іменування, але зазначив би, що, хоча цей метод містить у собі слово "база даних", цей механізм зберігання може змінитися вниз по дорозі. З наведеного коду нічого не прив'язує функція до платформи зберігання бази даних, яка використовується - або навіть якщо це база даних. Ми просто припустили, тому що це в назві. Знову ж таки, якщо припустити, що ці геттери завжди зберігаються, змінити, як / де вони зберігаються, буде легко.
Я б переосмислив функцію та два об'єкти, хоча у вас є функція, яка має залежність від двох об'єктних структур, а саме від гетерів, які використовуються. Крім того, схоже, що ця функція пов'язує ці два об'єкти в одну кумулятивну річ, яка зберігається. Моя кишка говорить мені, що третій предмет може мати сенс. Мені потрібно більше дізнатися про ці об’єкти та про те, як вони співвідносяться в дійсності та передбачуваній дорожній карті. Але моя кишка схиляється в тому напрямку.
Оскільки код зараз є, запитання напрошується "Де та чи повинна бути ця функція?" Це частина облікового запису чи OtherThing? Куди воно йде?
Я здогадуюсь, що вже є третя об’єктна "база даних", і я схиляюся до введення цієї функції в цей об'єкт, і тоді це стає завданням об'єктів, щоб мати можливість обробляти обліковий запис та OtherThing, перетворювати, а потім також зберігати результат .
Якщо ви повинні піти так далеко, щоб зробити 3-й об'єкт відповідним об'єктно-реляційному відображенню (ORM), тим краще. Це зробило б дуже очевидним, щоб хтось, хто працює з кодом, зрозумів: «Ага, тут обліковий запис та OtherThing розбиваються та зберігаються».
Але також може бути сенс запровадити четвертий об'єкт, який виконує завдання поєднання та перетворення облікового запису та іншогоThing, але не керує механікою збереження. Я б зробив це, якщо ви передбачите набагато більше взаємодій з або між цими двома об'єктами, тому що при цьому зростаю, я хотів би, щоб шматочки стійкості перетворювались на об'єкт, який управляє лише стійкістю.
Я б намагався зберегти дизайн таким чином, що будь-який обліковий запис, OtherThing або третій ORM-об'єкт можна змінити, не змінюючи інших трьох. Якщо немає вагомих причин цього не робити, я хотів би, щоб Account and OtherThing були незалежними і не знали внутрішньої роботи та структури один одного.
Звичайно, якби я знав повний контекст, що це буде, я міг би повністю змінити свої ідеї. Знову-таки, саме так я думаю, коли бачу такі речі, і як худа.