Pemrograman berorientasi berorientasi MVC AOP
Saya percaya semua orang belum terpapar kata AOP, tetapi sebenarnya Anda sudah terpapar, hanya dalam mode desain. Gagasan yang digunakan oleh AOP sebenarnya sama dengan pola desain, yaitu fungsi ditambahkan atau dimodifikasi tanpa memodifikasi kode asli. Juga, AOP sebagian besar digunakan di musim semi, tetapi apa yang ditulis dalam artikel ini hanya digunakan dalam MVC, jadi berhati -hatilah.
1. Pendahuluan
Apa yang disebut AOP (singkatan dari pemrograman berorientasi aspek) berarti teknologi yang mengimplementasikan pemeliharaan fungsi program terpadu melalui metode prekompilasi dan agen dinamis selama runtime. AOP adalah kelanjutan dari OOP, topik hangat dalam pengembangan perangkat lunak, bagian penting dari kerangka kerja Spring, dan paradigma turunan dari pemrograman fungsional. Berbagai bagian logika bisnis dapat diisolasi dengan menggunakan AOP, sehingga mengurangi kopling antara berbagai bagian logika bisnis, meningkatkan penggunaan kembali program, dan meningkatkan efisiensi pengembangan.
Di atas adalah penjelasan resmi dari Baidu Encyclopedia, tetapi menurut saya, AOP sebenarnya lebih dari semacam pemikiran, semacam pemikiran yang dapat bergerak dan menghubungkan seluruh tubuh. AOP sebenarnya menghadapi lebih banyak badan program yang ditulis oleh fungsi persetujuan atau proses panggilan. Dari aspek kata pertamanya, yang mengacu pada suatu aspek, kita juga dapat memahami bahwa metode ini adalah mengimplementasikan satu aspek. Ini sebenarnya sangat mirip dengan file global di MVC, dan juga merupakan bagian penting dari kerangka musim semi. Ini adalah paradigma turunan dari pemrograman fungsional. Berbagai bagian logika bisnis dapat diisolasi dengan menggunakan AOP, sehingga mengurangi kopling antara berbagai bagian logika bisnis, meningkatkan penggunaan kembali program, dan meningkatkan efisiensi pengembangan.
Kedua, sifat prekompilasinya dapat menangani beberapa kesalahan dengan baik atau merugikan beberapa situasi, yang juga menyebabkannya menjadi lebih umum dalam menilai izin dan output terpadu dari sesuatu saat merancang. "Teknologi dapat dicapai melalui metode prekompilasi dan proksi dinamis selama runtime untuk secara dinamis menambahkan fungsi ke program tanpa memodifikasi kode sumber. AOP sebenarnya merupakan kelanjutan dari pola desain GOF. Pola desain tanpa lelah mengejar decoupling antara penelepon dan Kalle, meningkatkan fleksibilitas dan skalabilitas kode. AOP dapat dikatakan sebagai pelaksanaan." Kalimat di atas juga merupakan interpretasi AOP yang baik.
2. Implementasi di MVC
Setelah banyak bicara, mari kita lihat. Pertama, kita perlu membuat proyek MVC baru di vs., pilih MVC3 atau 4 dan tidak apa -apa, kemudian membuat pengontrol, beri nama sesuka hati, dan kemudian buat tampilannya, dan tulis HelloWorld paling sederhana pada tampilan.
<! Doctype html> <html> <head> <title> index </itement> </head> <body> <vev> <a> halo! Dunia </a> </div> </body> </html>
Gambar di sebelah kanan menunjukkan solusi MVC yang saya buat, pengontrol yang ditambahkan dan tampilan. Tulis kode di atas dalam tampilan untuk ditampilkan halo! Dunia.
Setelah berjalan (tidak berfungsi) apakah kata HelloWorld muncul di halaman web?
Oke, selanjutnya kita mulai membuat file AOP baru dan kemudian menggunakannya. Pertama, tambahkan kelas baru ke proyek ini, yang disebut FilterPublic, tambahkan referensi menggunakan System.web.mvc dalam referensi, dan kemudian biarkan kelas ini mewarisi dari ActionFilterAttribute. Setiap orang harus memperhatikan aksi kata, yang berarti bahwa hal ini didasarkan pada tindakan.
Kemudian kami menulis kode berikut:
Pesan string publik {get; mengatur; } public override void onactionExecuting (actionExecutingContext filterContext) {base.onactionExecuting (filterContext); filtercontext.httpcontext.response.write ("sebelum tindakan eksekusi" + pesan + "<br />"); } public override void onactionExecuted (actionExecutedContext filterContext) {base.onactionExecuted (filterContext); filtercontext.httpcontext.response.write ("Setelah eksekusi tindakan" + pesan + "<br />"); } public override void onResultExecuting (resultExecutingContext filterContext) {base.onResultExecuting (filterContext); filtercontext.httpcontext.response.write ("return sebelum hasil" + pesan + "<br />"); } public override void onResultExecuted (resultExecutedContext filterContext) {base.onResultExecuted (filterContext); filtercontext.httpcontext.response.write ("return setelah hasil" + pesan + "<br />"); }Ini adalah berbagai tindakan yang dipicu oleh filter, dan kemudian kami membuat modifikasi berikut ke metode default di pengontrol:
[<span style = "font-size: 18px;"> filterpublic </span> (message = "action")] public actionResult index () {httpcontext.response.write ("Tindakan mengeksekusi ・・ <br />"); mengembalikan konten ("Hasil ・・ <br />"); } Kemudian tambahkan kalimat [filterpublic (pesan = "controller")] pada kelas kelas pengontrol, dan kemudian jalankan. Apa yang akan terjadi?
Tindakan sebelum tindakan eksekusi mengeksekusi ・・・ Setelah tindakan eksekusi hasil pengembalian sebelum tindakan eksekusi adalah hasil pengembalian ・・・ Setelah hasil pengembalian setelah pengembalian
Anda dapat melihat bahwa sebelum metode dalam pengontrol dieksekusi, pertama -tama kami akan menjalankan kode di FilterPublic yang kami atur di bawah ini. Dan ketika tindakan terjadi di waktu yang berbeda, kita juga dapat melihat metode mana yang dipicu.
Namun, metode berbasis pengontrol yang ditulis pada pengontrol tidak memicu. Mengapa ini?
Bahkan, masalah ini sangat sederhana. Ketika kami mengatur program AOP kami, kami tidak mengatur parameter dan tidak mengizinkan filter ditumpangkan. Pada saat ini, kami hanya menambahkan: [attributeUsage (atributeTargets.all, izinMultiple = true)] ke kelas filterpublic yang telah Anda tulis, dan kami dapat memicu berbagai filter atau filter yang ditumpangkan. Saat ini, mari kita coba berjalan:
Pengontrol sebelum tindakan dieksekusi. Tindakan dieksekusi. Tindakan dieksekusi. Setelah tindakan dieksekusi. Tindakan dieksekusi. Setelah tindakan dieksekusi. Pengontrol kembali sebelum hasilnya. Pengontrol kembali sebelum hasilnya. Tindakan kembali setelah hasil. Tindakan kembali setelah hasil. Pengontrol kembali setelah hasil.
Dengan cara ini, filter pada pengontrol juga dipicu, jadi ketika kita menggunakan metode AOP, kita hanya perlu menulis tag kelas filter pada metode tertulis kita sendiri atau metode pemuatan default halaman.
Jadi, jika kita memiliki fungsi yang mengharuskan semua halaman dipicu, bukankah itu merepotkan? Jangan khawatir, giliran kami untuk bekerja saat ini. Cukup daftarkan filter yang Anda tulis di bawah metode registerglobalfilters di bawah file global.asax:
public static void registerglobalfilters (filter globalFilterCollection) {filter.add (new handleErrorAttribute ()); // Tentukan filter Anda sendiri sebagai Global Filters.Add (baru <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); }Kemudian jalankan dan lihat hasilnya:
Tindakan Sebelum Eksekusi Tindakan Global Sebelum Eksekusi Tindakan Pengontrol Sebelum Tindakan Eksekusi Sebelum Tindakan Eksekusi Dieksekusi ・・・ Setelah Tindakan Setelah Tindakan Eksekusi Setelah Tindakan Pengontrol Eksekusi Setelah Eksekusi Hasil Pengembalian Global Sebelum Hasil Pengembalian Global Sebelum Hasil Pengembalian Pengontrol Sebelum Tindakan Hasil dikembalikan Hasil Setelah Hasil Pengembalian Setelah Hasil Pengembalian Pengembalian
Dengan cara ini, pemicu global dilakukan (pesan dalam filter hanya digunakan untuk mengidentifikasi hierarki, dan tidak dapat didefinisikan saat digunakan secara formal.)
Dari perspektif ini, jika Anda ingin dengan cepat menambahkan metode global, Anda hanya perlu membuat filter baru dan kemudian mengubah file global. Bukankah itu sangat nyaman?
Di atas adalah beberapa penelitian singkat saya tentang AOP. Jika ada kesalahan, harap perbaiki saya.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!