У нашому застосуванні є три шари. Службовий рівень для надання зовнішнього API. BO-шар для нашої логіки бізнесу та DAO-шар для підключення до нашої бази даних.
Скажімо, щоразу, коли ми оновлюємо Файл, ми також хочемо щось змінити в папці, наприклад, "остання змінена дата". Це потрібно зробити в рамках транзакції. Або це вдається, і файл, і папка редагуються. Або стався збій, і транзакція повертається назад, тому обидва об'єкти знаходяться в попередньому стані.
Акція "Редагувати папку, коли файл редагується" - суто бізнес-логіка. Отже, це означатиме, що він належить до шару BO. Однак ми використовуємо Objectify для нашої бази даних, тому для початку транзакції нам потрібно зателефонувати ofy (). Transact (...). Якщо ми називаємо цю функцію в шарі BO, це порушує наш дизайн, оскільки в нашому бізнес-рівні будуть виникати конкретні дзвінки (Datactify) для бази даних.
Що було б чистим вирішенням цієї проблеми?
FileBO
зателефонуватиFolderBO.edit(newDate)
через проблему транзакцій?