Konsep AOP dijelaskan untuk boneka


19

Adakah yang bisa menjelaskan konsep AOP untuk boneka: titik gabung, titik potong, tenun, dll.

Sebagai contoh: Aspek: modularisasi masalah yang melintasi berbagai kelas. Apa artinya?

Jawaban:


15

Pikirkan kekhawatiran sebagai grup fungsionalitas misalnya pencatatan, audit, keamanan

Fungsionalitas ini selalu ada di sebagian besar kode, tetapi mereka tidak benar-benar hidup di kelas hewan> anjing kami - mereka adalah fungsi yang harus hidup di banyak kelas - mereka saling terkait .

  • Sebuah Joinpoint adalah tempat di kode di mana kode aspek yang benar-benar berlari.

  • Titik potong adalah bagaimana mengatakan kode apa yang berjalan di titik gabungan.

  • Weaving - adalah ketika kompiler / sistem mengambil kode normal Anda dan memasukkan semua kode AOP sehingga memicu kode yang benar, dll - dapat menganggap ini sebagai langkah pra-kompilasi tambahan.

Contoh sederhana yang bisa dimengerti adalah:

  1. Kami ingin melacak semua pemanggilan metode untuk keperluan debugging (mis. Kami ingin melihat metode mana yang dipanggil dalam urutan apa).
  2. Kami membuat aspek yang mencatat nama metode saat dipanggil
  3. Kami membuat titik pintas yang mengaitkan aspek dengan semua metode dalam kode. Dalam sebagian besar kerangka kerja AOP Anda dapat melakukan ini dengan mudah dengan beberapa kartu liar
  4. Kami sekarang memiliki pencatatan setiap metode yang pernah dipanggil.

Perlu diketahui bahwa terminologi sedikit berbeda antara implementasi yang berbeda dan kerangka kerja AOP.


Sama seperti saya sedang menulis jawaban panjang saya! Milikmu lebih ringkas, aku suka itu. Akan mengeditnya sedikit untuk kejelasan.
Martijn Verburg

Terima kasih, saya harus mempelajari aturan pemformatan, terus lupa.
Jonno

Sepertinya ini akan mudah diimplementasikan dengan dekorator Python atau Lisp macros- Y / N?
Paul Nathan

@ Paul - tidak terbiasa dengan konstruk yang Anda sebutkan, saya khawatir dan google cepat tidak memberi saya wawasan yang cukup untuk menjawabnya.
Jonno

@ PaulNathan: AOP cukup sederhana dalam bahasa dinamis. Kerangka kerja AOP sederhana dapat dibuat dalam satu sore. Dalam bahasa yang dikompilasi seperti Java hidup tidak begitu manis.
kevin cline

-1

Baca berurutan

Setiap definisi dibangun dari yang sebelumnya.

Perhatian lintas sektoral

Sesuatu yang mengganggu Anda (kekhawatiran) di mana saja (lintas sektor) di seluruh aplikasi Anda. misalnya penebangan atau keamanan

Aspek

Sepotong kode yang secara otomatis ditambahkan sebelum , setelah , atau keduanya ( sekitar ) kode Anda yang ada

PointCut & JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Potongan titik

Tempat dalam eksekusi kode di mana bagian dari aspek dieksekusi.

JoinPoint

Titik di mana aspek Anda "bergabung" dengan titik potong. Pada joinPoint "sebelum" Anda akan memiliki akses ke parameter, pada joinPoint "sesudah" Anda akan memiliki akses ke nilai balik. Jika pengecualian dilemparkan, Anda mungkin perlu "coba-tangkap-akhirnya" untuk menangani atau melemparkannya kembali.

Menenun

Proses menambahkan aspek di sekitar titik potong


Siapa pun yang memilih jawaban saya, silakan tinggalkan komentar mengapa - jika Anda tidak keberatan. Saya berjanji tidak akan memulai pertengkaran. Saya ingin tahu apa yang bisa saya lakukan dengan lebih baik. Terima kasih!
Prashant
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.