Dalam membaca praktik yang baik untuk aplikasi basis data, saya sering menemui pendukung yang disebut "lapisan logika bisnis" dan saya mencoba memutuskan apakah yang terbaik untuk proyek saya untuk menggunakannya (ini adalah proyek pribadi kecil). Masalah saya terletak pada kenyataan bahwa saya tidak bisa memikirkan apa pun untuk BLL untuk melakukan hal yang DAL tidak bisa menangani (mengeksekusi query dan memetakan hasil ke objek), jadi BLL saya hanya memanggil DAL tanpa melakukan apa-apa sendiri.
Mungkin saya salah tentang apa yang seharusnya dilakukan DAL juga. Tetapi terlepas dari itu, fungsionalitas macam apa yang diharapkan dari BLL dalam aplikasi manajemen basis data?
project-structure
Andrew Arnold
sumber
sumber
Jawaban:
Untuk aplikasi saya yang lebih kecil, BLL saya biasanya dimulai sebagai pass-through ke DAL. Saya baik-baik saja dengan itu. Ketika saya "menemukan" aturan bisnis, BLL adalah tempat saya meletakkannya. Saya juga akhirnya menemukan banyak hal yang diperlukan di BLL ketika saya menulis tes saya. Untuk aplikasi pribadi saya, saya membuat aturan bisnis, dan BLL masih di tempat saya meletakkannya. Bagi saya, BLL adalah sesuatu yang tumbuh seiring waktu. Semakin lama saya mengerjakan proyek, semakin besar BLL-nya.
Apakah saya akan mempertimbangkan menggabungkan BLL dan DAL untuk proyek kecil? Saya mungkin, kecuali kenyataan bahwa saya mengubah teknologi DAL sesering saya mengubah gaya rambut, dan saya suka memiliki sesuatu untuk mengisolasi kode klien saya dari itu.
sumber
BLL akan menangani hal-hal yang merupakan bagian dari domain bisnis, bukan bagian dari database, dan bukan bagian dari UI (biasanya). Misalnya, menggunakan usia pelanggan untuk menentukan apakah mereka memenuhi syarat untuk diskon khusus senior. DAL seharusnya tidak melakukan ini, ia hanya harus mengambil data pelanggan, dan kemudian menyimpannya dengan data diskon setelah BLL melakukan tugasnya. DAL harus lebih fokus pada CRUD. Dalam aplikasi kecil, kedua masalah tersebut mungkin tumpang tindih.
sumber
Andrew,
Lapisan logika bisnis adalah apa yang Anda dapatkan ketika Anda melakukan pengembangan berbasis domain dan fokus pada kegiatan inti domain. Jika Anda menghapus lapisan presentasi (gui, web) dan lapisan infrastruktur (db, konektivitas jaringan, dll.), Anda memiliki aset inti yang merupakan bagian dari domain Anda, seperti menyetor uang ke rekening bank. Sekarang jika Anda telah memodelkan lapisan bisnis Anda dan mengisolasinya dari presentasi dan infrastruktur, Anda dapat dengan mudah memindahkannya ke penggunaan lain, seperti web atau perangkat seluler. Ini cara yang bersih untuk memikirkan pengembangan dan dari apa yang saya lihat, sayangnya tidak ditanggapi dengan serius.
Saya merekomendasikan Anda untuk menggunakan Eric Evans - Domain Driven Design, yang merupakan buku bagus yang membenarkan upaya pengembangan fokus pada domain. Harus diakui, ini agak sulit untuk dibaca, tetapi ini memang membangun momentum dan memiliki beberapa keyakinan kuat tentang apa yang dilakukan pengembang yang salah dengan sistem saat ini.
sumber
Tidak ada yang mengatakan Anda HARUS memiliki sejumlah tingkatan atau lapisan. Itu semua tergantung pada kompleksitas proyek Anda. Lihatlah banyak aplikasi sampel MVC, seperti nerd dinner atau record store .. semuanya menggunakan 2 layer karena untuk aplikasi yang memiliki logika pemrosesan sangat sedikit, itu tidak masuk akal.
Namun, bahkan jika aplikasi Anda kecil, itu mungkin mendapat manfaat dari abstrak lapisan data dari lapisan presentasi melalui lapisan ketiga yang biasanya menjadi lapisan bisnis. Ini memungkinkan Anda membuat perubahan di satu tempat, bukan di seluruh lapisan presentasi Anda.
Misalkan Anda memutuskan untuk mengubah ORM Anda dari Linq ke SQL ke Entity Framework (atau nhibernate). Mungkin akan lebih mudah untuk mengubahnya di lapisan bisnis daripada di lapisan presentasi Anda, karena presentasi cenderung berpasangan dengan model presentasi itu.
Jika Anda memahami MVC, yaitu .. Model View Controller, Anda dapat memikirkan arsitektur aplikasi Anda dalam istilah yang sama. Model ini mirip dengan lapisan data Anda, lapisan Presentasi adalah tampilan, dan Lapisan Bisnis adalah Pengontrol.
sumber
Melengkapi jawaban Desolate Planet tentang Domain Driven Design:
Lihat juga The Onion Architecture , yang sangat selaras dengan konsep Domain Driven Design.
Perhatikan bagaimana "Lapisan" Logika Bisnis adalah inti dari bawang merah dan setiap lapisan infrastruktur (seperti lapisan akses data) adalah ketergantungan luarnya. Ini banyak membantu pengujian, karena Anda harus dapat mengejek setiap ketergantungan infrastruktur eksternal dan sepenuhnya menguji logika domain Anda.
Menurut pendapat saya: Lapisan Logika Bisnis adalah tempat "solusi konseptual murni" hidup. Sisanya hanyalah detail implementasi infrastruktur.
Namun, beberapa aplikasi mungkin tidak memerlukan arsitektur semacam ini. Jika semua aplikasi Anda adalah operasi dataset CRUD, 'solusi konseptual murni' Anda mungkin bisa dibilang kosong dan yang Anda butuhkan hanyalah pengeditan basis data. Dalam hal ini, Anda mungkin sebaiknya fokus pada layer DAL dan UI saja.
sumber
Jawaban untuk pertanyaan ini adalah (IMHO): "bisakah saya mengganti DAL saya sepenuhnya dan tidak perlu menulis ulang kode logika bisnis saya"?
Anggap saja seperti lapisan presentasi Anda - cukup umum untuk berpikir mengubah GUI untuk yang berbeda, GUI desktop yang tebal akan ditukar untuk klien web, yang ditukar untuk aplikasi iPhone. Ini tidak begitu umum untuk berpikir seperti ini untuk BLL / DAL karena mereka tidak pernah benar-benar ditukar kecuali mungkin untuk sesuatu yang sangat mirip (misalnya DB SQLServer diganti dengan yang MySQL), tetapi jika Anda bayangkan Anda harus mengubah DB Anda ke penyimpanan terdistribusi layanan yang diakses menggunakan API, Anda mungkin mendapatkan ide yang lebih jelas tentang di mana lapisan bertemu.
sumber