Saya mengerti pemrograman berorientasi objek, dan sudah lama menulis program OO. Orang-orang tampaknya berbicara tentang pemrograman berorientasi aspek, tetapi saya tidak pernah benar-benar belajar apa itu atau bagaimana menggunakannya. Apa paradigma dasarnya?
Pertanyaan ini terkait, tetapi tidak cukup bertanya:
Pemrograman Berorientasi Aspek vs. Pemrograman Berorientasi Objek
Jawaban:
AOP mengatasi masalah lintas sektoral , yang merupakan jenis kode apa pun yang diulangi dalam metode yang berbeda dan biasanya tidak dapat sepenuhnya di refactored ke dalam modulnya sendiri, seperti dengan pencatatan atau verifikasi. Jadi, dengan AOP Anda dapat mengabaikan hal itu dari kode utama dan mendefinisikannya secara vertikal seperti:
Dan kemudian aspek-weaver digunakan untuk mengkompilasi kode menjadi ini:
sumber
Sayangnya, tampaknya sangat sulit untuk membuat AOP benar-benar bermanfaat dalam organisasi ukuran menengah-normal. (Dukungan editor, rasa kontrol, fakta bahwa Anda mulai dengan hal-hal yang tidak begitu penting yang mengarah pada pembusukan kode, orang-orang pulang ke keluarga mereka, dll.)
Saya menaruh harapan saya pada pemrograman berorientasi komposit , yang merupakan sesuatu yang lebih dan lebih realistis. Ini terhubung ke banyak ide populer dan memberi Anda sesuatu yang sangat keren.
Lihat implementasi yang akan datang di sini: qi4j.org/
PS. Sebenarnya, saya berpikir bahwa salah satu keindahan dengan AOP juga merupakan tumit achilles: Ini tidak mengganggu, membiarkan orang mengabaikannya jika mereka bisa, jadi itu akan diperlakukan sebagai perhatian sekunder di sebagian besar organisasi.
sumber
Disalin dari duplikat untuk kelengkapan (Einstein):
Contoh klasiknya adalah keamanan dan pencatatan. Alih-alih menulis kode dalam aplikasi Anda untuk mencatat kejadian x atau memeriksa objek z untuk kontrol akses keamanan ada alat bahasa "out of band" dari kode normal yang secara sistematis dapat menyuntikkan keamanan atau masuk ke rutinitas yang tidak secara otomatis memilikinya di sedemikian rupa sehingga meskipun kode Anda tidak menyediakannya - itu diurus.
Contoh yang lebih konkret adalah sistem operasi yang menyediakan kontrol akses ke file. Program perangkat lunak tidak perlu memeriksa pembatasan akses karena sistem yang mendasarinya berfungsi untuk itu.
Jika Anda pikir Anda memerlukan AOP dalam pengalaman saya, Anda sebenarnya benar-benar perlu menginvestasikan lebih banyak waktu dan upaya dalam manajemen meta-data yang sesuai dalam sistem Anda dengan fokus pada desain struktur / sistem yang dipikirkan dengan baik.
sumber
Disalin dari Spring in Action
sumber
Disalin dari duplikat untuk kelengkapan (Bel):
Atribut kelas dan metode dalam .NET adalah bentuk pemrograman berorientasi aspek. Anda menghias kelas / metode Anda dengan atribut. Di belakang layar ini menambahkan kode ke kelas / metode Anda yang melakukan fungsi-fungsi tertentu dari atribut. Sebagai contoh, menandai sebuah kelas yang dapat diubah-ubah memungkinkannya untuk diserialisasi secara otomatis untuk penyimpanan atau transmisi ke sistem lain. Atribut lain mungkin menandai properti tertentu sebagai non-serializable dan ini akan secara otomatis dihilangkan dari objek serial. Serialisasi adalah suatu aspek, diterapkan oleh kode lain dalam sistem, dan diterapkan ke kelas Anda dengan penerapan atribut "konfigurasi" (dekorasi).
sumber
AOP dapat digunakan untuk melakukan tindakan yang tidak terkait dengan logika bisnis aplikasi Anda seperti logging, caching, dll. Tindakan ini dapat diletakkan di bagian terpisah dari aplikasi Anda dan kemudian digunakan kembali di seluruh aplikasi. Biasanya ada dua cara untuk mencapai ini. Menyuntikkan kode secara otomatis oleh preprocessor sebelum / setelah suatu metode, atau melampirkan kelas proxy yang memotong panggilan metode dan kemudian dapat menjalankan sesuatu sebelum / setelah panggilan metode.
Berikut adalah contoh di .Net. Ia menggunakan kelas proxy untuk mencegat panggilan metode dan mengeksekusi kode sebelum panggilan metode saif setelah.
Pemrograman Berorientasi Aspek (AOP) dalam .NET Core dan C # menggunakan AutoFac dan DynamicProxy
sumber
Ada contoh AOP, ia menggunakan spring AOP sebagai contoh. Contohnya cukup mudah dimengerti.
Kerangka kerja Spring AOP (Pemrograman berorientasi aspek) digunakan untuk memodulasi masalah lintas sektoral dalam berbagai aspek. Sederhananya, itu hanya pencegat untuk mencegat beberapa proses, misalnya, ketika suatu metode dieksekusi, Spring AOP dapat membajak metode eksekusi, dan menambahkan fungsionalitas tambahan sebelum atau setelah eksekusi metode.
Referensi: http://www.mkyong.com/spring/spring-aop-examples-advice/
sumber
AOP adalah cara untuk memodulasi aplikasi Anda dengan lebih baik untuk fungsionalitas yang membentang melintasi banyak batas. AOP adalah cara lain untuk merangkum fitur-fitur ini dan mengikuti Single Responsiblity dengan memindahkan masalah lintas sektoral ini (logging, penanganan kesalahan, dll.) Dari komponen utama aplikasi Anda. Ketika digunakan secara tepat, AOP dapat menyebabkan tingkat pemeliharaan dan ekstensibilitas yang lebih tinggi dalam aplikasi Anda seiring waktu.
sumber