Terapkan fasad atau lapisan adapter antara subsistem yang berbeda yang tidak berbagi semantik yang sama. Lapisan ini menerjemahkan permintaan yang dibuat oleh satu subsistem ke subsistem lainnya. Gunakan pola ini untuk memastikan bahwa desain aplikasi tidak dibatasi oleh dependensi pada subsistem luar. Pola ini pertama kali dijelaskan oleh Eric Evans dalam Desain Berbasis Domain.
Konteks dan masalah
Sebagian besar aplikasi bergantung pada sistem lain untuk beberapa data atau fungsi. Misalnya, saat dimigrasikan ke sistem modern, aplikasi lama masih memerlukan sumber daya lama yang sudah ada. Fitur baru harus dapat memanggil sistem lama. Hal ini terutama berlaku untuk migrasi bertahap, di mana fitur yang berbeda dari aplikasi yang lebih besar dipindahkan ke sistem modern dari waktu ke waktu.
Sistem lama ini sering kali mengalami masalah kualitas seperti skema data berbelit-belit atau API yang usang. Fitur dan teknologi yang digunakan di sistem lama dapat sangat bervariasi dari sistem yang lebih modern. Untuk beroperasi dengan sistem lama, aplikasi baru mungkin perlu mendukung infrastruktur, protokol, model data, API, atau fitur yang usang yang tidak akan Anda masukkan ke dalam aplikasi modern.
Mempertahankan akses antara sistem baru dan lama dapat memaksa sistem baru untuk mematuhi setidaknya beberapa API sistem lama atau semantik lainnya. Ketika fitur lama ini memiliki masalah kualitas, mendukungnya akan "merusak" apa yang mungkin berupa aplikasi modern yang dirancang dengan bersih.
Masalah serupa bisa muncul dengan sistem eksternal apa pun yang tidak dikontrol oleh tim pengembangan Anda, bukan hanya sistem lama.
Solusi
Isolasi subsistem yang berbeda dengan menempatkan lapisan anti-korupsi di antara mereka. Lapisan ini menerjemahkan komunikasi antara kedua sistem, yang memungkinkan satu sistem tetap tidak berubah sedangkan yang lain dapat menghindari mengorbankan desain dan pendekatan teknologinya.
Diagram di atas menunjukkan aplikasi dengan dua subsistem. Subsistem A memanggil ke subsistem B melalui lapisan anti-korupsi. Komunikasi antara subsistem A dan lapisan anti-korupsi selalu menggunakan model data dan arsitektur subsistem A. Panggilan dari lapisan anti-korupsi ke subsistem B sesuai dengan model atau metode data subsistem tersebut. Lapisan anti-korupsi berisi semua logika yang diperlukan untuk menerjemahkan antara kedua sistem. Lapisan dapat diimplementasikan sebagai komponen dalam aplikasi atau sebagai layanan independen.
Masalah dan pertimbangan
- Lapisan anti-korupsi dapat menambah latensi ke panggilan yang dilakukan antara kedua sistem.
- Lapisan anti-korupsi menambah layanan tambahan yang harus dikelola dan dipertahankan.
- Pertimbangkan bagaimana lapisan anti-korupsi Anda akan diskalakan.
- Pertimbangkan apakah Anda membutuhkan lebih dari satu lapisan anti-korupsi. Anda mungkin ingin menguraikan fungsionalitas menjadi beberapa layanan menggunakan teknologi atau bahasa yang berbeda, atau mungkin ada alasan lain untuk mempartisi lapisan anti-korupsi.
- Pertimbangkan bagaimana lapisan anti-korupsi akan dikelola dalam kaitannya dengan aplikasi atau layanan Anda yang lain. Bagaimana ini akan diintegrasikan ke dalam proses pemantauan, rilis, dan konfigurasi Anda?
- Pastikan transaksi dan konsistensi data tetap terjaga dan dapat dipantau.
- Pertimbangkan apakah lapisan anti-korupsi perlu menangani semua komunikasi antara subsistem yang berbeda, atau hanya subset dari fitur.
- Jika lapisan anti-korupsi adalah bagian dari strategi migrasi aplikasi, pertimbangkan apakah ini akan permanen, atau akan dihapus setelah semua fungsi lama telah dimigrasikan.
- Pola ini diilustrasikan dengan subsistem yang berbeda di atas, tetapi dapat berlaku untuk arsitektur layanan lain juga, seperti ketika mengintegrasikan kode warisan bersama-sama dalam arsitektur monolitik.
Kapan menggunakan pola ini
Gunakan pola ini ketika:
- Migrasi direncanakan terjadi selama beberapa tahap, tetapi integrasi antara sistem baru dan lama perlu dipertahankan.
- Dua subsistem atau lebih memiliki semantik yang berbeda, tetapi masih perlu berkomunikasi.
Pola ini mungkin tidak cocok jika tidak ada perbedaan semantik yang signifikan antara sistem baru dan lama.
Desain beban kerja
Arsitek harus mengevaluasi bagaimana pola Lapisan Anti-korupsi dapat digunakan dalam desain beban kerja mereka untuk mengatasi tujuan dan prinsip yang tercakup dalam pilar Azure Well-Architected Framework. Contohnya:
Pilar | Bagaimana pola ini mendukung tujuan pilar |
---|---|
Keunggulan Operasional membantu memberikan kualitas beban kerja melalui proses standar dan kohesi tim. | Pola ini membantu memastikan bahwa desain komponen baru tetap tidak terinfluensi oleh implementasi warisan yang mungkin memiliki model data atau aturan bisnis yang berbeda ketika Anda berintegrasi dengan sistem warisan ini dan dapat mengurangi utang teknis dalam komponen baru sambil tetap mendukung komponen yang ada. - Alat dan proses OE:04 |
Seperti halnya keputusan desain apa pun, pertimbangkan tradeoff terhadap tujuan pilar lain yang mungkin diperkenalkan dengan pola ini.