Khususnya untuk memulai rangkaian baru untuk kursus "Pola Arsitektur dan Desain", saya melanjutkan rangkaian publikasi saya tentang pola GRASP.
pengantar
Dijelaskan dalam buku Craig Larman "Menerapkan UML dan pola, edisi ke-3", pola GRASP adalah generalisasi pola GoF, serta konsekuensi langsung dari prinsip OOP. Mereka melengkapi langkah yang hilang dalam tangga logis yang memungkinkan Anda mendapatkan pola Pemerintah Keuangan dari prinsip-prinsip OOP. Pola GRASP bukanlah pola desain (seperti GoF), tetapi prinsip dasar mengalokasikan tanggung jawab antar kelas. Seperti yang diperlihatkan oleh praktik, mereka tidak terlalu populer, tetapi analisis kelas yang dirancang menggunakan set lengkap pola GRASP adalah prasyarat untuk menulis kode yang baik.
Daftar lengkap template GRASP terdiri dari 9 elemen:
- Ahli Informasi
- Pencipta
- Kontroler
- Kopling rendah
- Kohesi tinggi
- Polimorfisme
Terakhir kali kita membahas pola Controller . Hari ini saya mengusulkan untuk mempertimbangkan pola yang tersisa dari daftar.
Polimorfisme
Perilaku yang berbeda harus ditangani berdasarkan jenisnya, memungkinkan penggantian bagian sistem.
Diusulkan untuk mendistribusikan tanggung jawab antar kelas menggunakan operasi polimorfik, meninggalkan setiap sistem eksternal dengan antarmuka sendiri. Sebagai contoh, kami dapat mengutip pustaka standar, atau konfigurasi aplikasi dengan menghubungkan plugin tertentu untuk pelanggan yang berbeda sesuai dengan kebutuhan mereka.
Kehadiran konstruksi sakelar dalam kode merupakan pelanggaran prinsip ini, sakelar dan tunduk pada refactoring.
Penggunaan polimorfisme yang berlebihan menyebabkan kode menjadi lebih rumit dan umumnya tidak disarankan.
Fabrikasi murni
Kopling rendah dan kohesi tinggi harus dipastikan. Untuk tujuan ini, mungkin perlu mensintesis esensi buatan. Pola Fabrikasi Murni menyarankan agar Anda tidak ragu untuk melakukan ini. Sebagai contoh, pertimbangkan fasad ke database. Ini adalah objek buatan murni yang tidak memiliki analogi di bidang subjek. Secara umum, setiap fasad adalah Fabrikasi Murni (kecuali, tentu saja, fasad arsitektural dalam aplikasi yang sesuai).
Tipuan
Perlu untuk mendistribusikan tanggung jawab antar objek, menghindari pengikatan langsung. Untuk melakukan ini, Anda dapat menetapkan tanggung jawab untuk komunikasi antara komponen atau layanan ke objek perantara.
Diterjemahkan ke dalam bahasa Rusia, polanya menyiratkan hal berikut: objek apa pun dalam kode harus dipanggil melalui antarmukanya (objek perantara yang sama).
Tipuan adalah pola paling utama yang tercantum dalam artikel ini. Pertama, sangat sederhana dalam hal keamanan. Kedua, memberikan kode fleksibilitas yang luar biasa tanpa menjadi pengoptimalan prematur karena poin pertama. Jika semua kelas memanggil satu sama lain melalui antarmuka, maka ini mengarah pada kemampuan untuk "merobek" bagian mana pun dari sistem dan menggunakannya kembali di tempat lain. Selain itu, penggunaan Indirection memungkinkan Anda untuk menambahkan hampir semua template dari sekelompok empat orang tanpa terlalu banyak ketegangan atau kelas refactor.
Variasi yang Dilindungi
Diperlukan perancangan sistem agar perubahan pada beberapa elemennya tidak mempengaruhi elemen lainnya. Sebagai solusi, diusulkan untuk mengidentifikasi titik-titik kemungkinan perubahan atau ketidakstabilan dan menetapkan tanggung jawab sedemikian rupa untuk memastikan operasi sistem yang stabil.
Sebenarnya, ini bukanlah sebuah pola, tetapi sebuah tujuan yang dicapai dengan mengikuti pola lainnya.
Keluaran
Template GRASP terdiri dari 8 pola:
- Ahli Informasi - kami memproses informasi di tempatnya.
- Pencipta - kami membuat objek di mana mereka dibutuhkan.
- Pengontrol - kami memindahkan logika multithreading ke kelas atau komponen terpisah.
- Kopling Rendah 5) Kohesi Tinggi - kami merancang kelas dengan logika bisnis homogen dan jumlah koneksi minimum di antara mereka.
- Polimorfisme - kami mengatur berbagai opsi untuk perilaku sistem dalam bentuk panggilan polimorfik, jika perlu.
- Pure Fabrication — , , Low Coupling High Cohesion.
- Indirection — .
- Protected Variations — , .
: