Kami memiliki tiga lapisan dalam aplikasi kami. Lapisan layanan untuk menyediakan API eksternal. Lapisan BO untuk logika bisnis kami, dan lapisan DAO untuk koneksi basis data kami.
Katakanlah setiap kali kita memperbarui File, kita juga ingin mengubah sesuatu di Folder, misalnya 'tanggal modifikasi terakhir'. Ini perlu dilakukan dalam transaksi. Entah berhasil dan baik File maupun Folder diedit. Atau ada kegagalan dan transaksi dibatalkan sehingga kedua objek berada dalam keadaan sebelumnya.
Tindakan "Edit folder saat file diedit" adalah murni logika bisnis. Jadi ini berarti itu termasuk dalam lapisan-BO. Namun, kami menggunakan Objectify untuk Database kami, jadi untuk memulai transaksi kami perlu memanggil ofy (). Transact (...). Jika kita memanggil fungsi ini di lapisan BO, ini akan merusak desain kita karena akan ada panggilan khusus Database (Objectify) di lapisan Bisnis kita.
Apa yang akan menjadi solusi bersih untuk masalah ini?
sumber
FileBO
meneleponFolderBO.edit(newDate)
karena masalah transaksi?Jawaban:
Cara Anda memotong transaksi memang merupakan logika bisnis. Jadi biarkan layer DAO Anda menyediakan API db framework independent untuk
transact
metode yang Anda sebutkan (dan mungkin untuk hal-hal seperticommit
danrollback
). Kemudian Anda dapat menggunakannya dari layer BO Anda tanpa membuatnya tergantung dari database Anda atau kerangka db Anda.sumber
Sepertinya Objectify dirancang untuk transaksi seperti atom ( Transaksi Mesin Aplikasi Google ). Ini akan menuntut Anda untuk mengembangkan abstraksi Anda sendiri tentang Manajemen Transaksi .
Pada kasus ini. abstraksi berjalan Bagaimana cara mendelegasikan manajemen transaksi ke lapisan atas?
@DocBrown mendekati bagi saya solusi yang lebih cepat dan lebih bersih untuk diimplementasikan ke dalam arsitektur yang diberikan ( arsitektur berlapis ).
Karena kami kehilangan terlalu banyak info tentang aplikasi dan konteksnya, solusi Doc juga bagi saya paling aman.
Namun, saya akan menyarankan untuk melihat pola desain UnitOfWork untuk lapisan bisnis . Saya pikir itu sesuai dengan manajemen transaksi yang dimaksudkan oleh Objectify .
Singkatnya, polanya bertujuan untuk merangkum aturan bisnis ke dalam Transaksi Bisnis (unit kerja). Pola ini memungkinkan pewarisan antara B.Ts dan sejauh ini saya melihat, Objectify juga. Bahkan mendukung komposisi. Jadi baik dengan komposisi atau pewarisan, pendekatan ini memungkinkan B.Ts yang kompleks .
Diterapkan pada arsitektur yang diberikan, akan terlihat seperti:
sumber