Saya mulai membangun aplikasi dalam 3 lapisan (DAL, BL, UI) [terutama menangani CRM, beberapa laporan penjualan, dan inventaris].
Seorang kolega mengatakan kepada saya bahwa saya harus pindah ke pola lapisan layanan, bahwa pengembang datang ke pola layanan dari pengalaman mereka dan itu adalah pendekatan yang lebih baik untuk merancang sebagian besar aplikasi. Dia mengatakan akan jauh lebih mudah untuk mempertahankan aplikasi di masa depan dengan cara itu.
Secara pribadi, saya merasa bahwa itu hanya membuat hal-hal menjadi lebih kompleks dan saya tidak bisa melihat banyak manfaat darinya yang akan membenarkan hal itu.
Aplikasi ini memang memiliki ui parsial kecil tambahan yang menggunakan beberapa (tetapi hanya beberapa) fungsi aplikasi desktop jadi saya menemukan diri saya menduplikasi beberapa kode (tapi tidak banyak). Hanya karena beberapa duplikasi kode saya tidak akan mengubahnya menjadi berorientasi layanan, tetapi dia berkata saya harus menggunakannya juga karena secara umum itu adalah arsitektur yang sangat bagus, mengapa programmer sangat bersemangat tentang layanan ??
Saya sudah mencoba google tetapi saya masih bingung dan tidak bisa memutuskan apa yang harus dilakukan.
sumber
With CRM, Sales and Inventory there will be a lot of CRUD-type use cases of which there is almost always a one-to-one correspondence with Service Layer operations
- jika ini semua tentang beberapa UI jadi bagaimana cara CRUD masuk ke sini? Dan jika saya tidak membutuhkan banyak UI meskipun CRUD berjalan baik dengan layanan, saya masih tidak akan membuat lapisan layanan, jika saya mengerti dengan benar, dan saya benar-benar berharap saya melakukannya karena saya lebih suka untuk menjaga hal-hal sederhana (lapisan layanan adalah mengacaukan pendapat saya yang belum berpengalaman)Menambahkan lapisan layanan karena Anda telah mengevaluasi ide dan menyimpulkan itu pendekatan terbaik: bagus
Menambahkan lapisan layanan karena itulah yang dilakukan semua anak keren: buruk
Jika perut Anda mengatakan Anda tidak membutuhkannya, maka jangan membuatnya.
Salah satu perkembangan yang lebih mengecewakan dalam dunia pemrograman selama lebih dari 10 tahun terakhir adalah bahwa ia telah menjadi berorientasi 'mode' yang menjengkelkan, dengan orang-orang mengikuti tren dan kereta musik seolah-olah mereka adalah sepatu musim ini. Jangan jatuh ke dalam perangkap itu. Karena 'semua orang' musim depan akan memberi tahu Anda bahwa Anda harus mendesainnya dengan cara lain.
Tidak ada yang salah atau benar dengan lapisan layanan - ini adalah pendekatan khusus yang kesesuaiannya harus dievaluasi berdasarkan kemampuan teknisnya untuk proyek yang sedang ditangani. Jangan merasa harus mengganti pendapat orang lain dengan penilaian Anda sendiri.
sumber
Ada banyak faktor yang masuk ke keputusan membuat lapisan layanan. Saya telah membuat lapisan layanan di masa lalu karena alasan berikut.
Kasus 1: Anda membuat fungsionalitas dasar yang perlu digunakan oleh banyak klien yang berbeda. Lapisan layanan membangun fungsionalitas untuk klien yang berbeda untuk memanfaatkan fungsionalitas Anda yang disediakan langsung dari kotak.
Kasus 2: Anda biasanya meng-host kode di ruang aplikasi tetapi Anda menggunakan perpustakaan pihak ketiga yang memiliki lisensi terbatas untuk Anda. Dalam hal ini Anda memiliki sumber daya yang ingin Anda gunakan di mana-mana, tetapi hanya dalam jumlah terbatas. Jika Anda meng-host-nya di balik layanan, maka seluruh organisasi Anda dapat menggunakannya dari aplikasi mereka tanpa harus membeli lisensi untuk setiap hosting.
Kasus 3: Anda sedang membangun fungsionalitas untuk pihak ketiga untuk berkomunikasi dengan Anda. Dalam contoh Anda, Anda dapat mengatur titik akhir inventaris untuk memungkinkan vendor menyampaikan pesan kepada Anda tentang pengiriman produk yang masuk.
Kasus 4: Anda telah menganalisis perusahaan kode Anda secara luas dan menemukan bahwa tim yang terpisah telah menciptakan hal yang sama (hanya diterapkan sedikit berbeda). Dengan lapisan layanan, Anda dapat memilih pendekatan terbaik dan sekarang Anda dapat menerapkan proses yang sama di semua tim dengan meminta mereka masuk ke dalam layanan. Manfaat lain untuk memusatkan logika adalah ketika bug ditemukan. Sekarang Anda dapat menggunakan perbaikan sekali dan semua klien menikmati manfaatnya pada saat bersamaan.
Semua ini dikatakan ada potensi negatif ke lapisan layanan.
Poin utamanya adalah tidak selalu sulit untuk membuat layanan sistem Anda berorientasi. Dalam pengalaman saya, biasanya itu ide yang bagus (saya cenderung membuat struktur aplikasi dengan cara ini), tetapi ini bukan keputusan otomatis. Pada akhirnya Anda harus mempertimbangkan pro dan kontra dan membuat keputusan yang tepat untuk situasi Anda.
sumber
Sebagian besar Lapisan Layanan yang saya lihat berantakan total. Layanan cenderung memiliki banyak metode berbeda, 1500 LOC tidak jarang. Metode yang berbeda tidak memiliki kesamaan, tetapi lakukan kode berbagi. Ini menghasilkan kopling tinggi , kohesi rendah . Itu juga melanggar OCP , karena setiap kali operasi baru diperlukan, Anda harus memodifikasi kode alih-alih memperluas basis kode. Lapisan layanan yang dibangun dengan baik secara teori dimungkinkan, tetapi saya tidak pernah melihatnya dalam praktik.
CQRS memecahkan masalah ini dan mencegah Anda dari keharusan membuat salah satu dari lapisan layanan prosedural tersebut.
sumber
Menambahkan antarmuka (lapisan layanan adalah jenis antarmuka) membutuhkan waktu. Yang bagus membutuhkan banyak waktu untuk merancang dan menguji. Sangat penting untuk melakukannya dengan benar pada percobaan pertama karena mengubahnya nanti akan menghancurkan semua klien. Juga, pertimbangkan bahwa Anda mungkin tidak akan tahu apa yang perlu ada di antarmuka itu sampai Anda memiliki klien kedua dengan kebutuhan yang sedikit berbeda. Mempertahankan layanan adalah proyek yang tidak pernah berakhir.
Di sebagian besar organisasi, jika Anda pergi ke sponsor bisnis Anda dan bertanya kepada mereka, "Apakah Anda ingin departemen lain mendapatkan manfaat dari (menggunakan kembali) sistem yang kami kembangkan dengan anggaran Anda?" mereka akan menertawakanmu. Dapatkan itu berfungsi untuk sponsor bisnis Anda terlebih dahulu, kemudian mulai bermain-main dengan menggunakan kembali kode itu (pada waktu departemen Anda sendiri).
Jika Anda tahu, pada kenyataannya, bahwa fungsionalitas yang Anda tulis hari ini akan digunakan kembali oleh beberapa klien layanan yang berbeda, maka pertimbangkan untuk merancang lapisan layanan sejak hari pertama. Jika Anda tidak yakin, atau sudah ada banyak yang tidak diketahui dalam proyek ini, dapatkan sesuatu yang sederhana terlebih dahulu dan pisahkan menjadi layanan dan klien nanti jika Anda punya waktu dan anggaran. Jauh lebih mudah untuk mendapatkan antarmuka layanan tepat pada percobaan pertama ketika Anda mulai dengan sistem kerja.
PS Jika Anda bekerja di Jawa, Joshua Bloch memiliki banyak saran antarmuka yang fantastis di seluruh bukunya, Java Efektif.
sumber
Saya setuju denganmu. Tidak perlu menyertakan satu layer lagi jika Anda menggunakan UI tunggal.
DAL, BL dan UI / Controller adalah kombinasi yang baik untuk merancang aplikasi. Jika Anda berencana untuk menggunakan UI tunggal, tidak perlu menyiapkan lapisan tambahan. Termasuk 1 lapisan lagi ke dalam aplikasi hanya meningkatkan upaya pengembangan / waktu.
Schenerio lain adalah menggunakan beberapa UI dalam aplikasi Anda, ada baiknya memiliki lapisan layanan untuk menangani UI dalam kasus ini.
Stack Overflow: Diskusi tentang pola lapisan layanan
sumber
Saya akan berpendapat bahwa BL Anda adalah lapisan layanan Anda. Tempat sentral tempat logika bisnis Anda berada. Ini harus DLL yang dapat digunakan oleh apa pun yang membutuhkan logika itu. Kemudian Anda dapat meletakkan layer web api di atasnya jika aplikasi Anda memiliki UI yang berbeda.
sumber