Bagaimana memprogram menggunakan PostSharp di C #

Aspect Oriented Programming (AOP) adalah paradigma pemrograman yang memungkinkan Anda menentukan kebijakan untuk mengelola masalah lintas sektor dalam aplikasi dengan mulus. AOP dapat dimanfaatkan untuk menghapus kode yang bercampur, menulis kode yang lebih bersih, meningkatkan abstraksi dan modularitas kode, mengurangi biaya pemeliharaan dan pengembangan, serta membuat aplikasi lebih mudah dikelola dan fleksibel. PostSharp adalah salah satu alat paling populer yang tersedia yang dapat digunakan untuk mengimplementasikan AOP dalam aplikasi.

Mulai

Untuk mulai menggunakan PostSharp, Anda mungkin ingin menginstal rilis stabil terbaru menggunakan Package Manager Console. Sebagai alternatif, Anda dapat menginstal PostSharp menggunakan jendela "Kelola Paket NuGet". Untuk mulai menggunakan PostSharp di aplikasi Anda, ikuti langkah-langkah berikut.

1. Buka Visual Studio 2015.

2. Dalam menu Visual Studio, klik File> New> Project.

3. Pilih template Aplikasi Konsol dari daftar template proyek yang ditampilkan.

4. Simpan proyek aplikasi konsol baru dengan sebuah nama.

5. Dalam menu Visual Studio, klik Tools> NuGet Package Manager> Kelola Paket NuGet untuk Solusi.

6. Cari rilis stabil terbaru dari PostSharp dan klik Instal.

Dan hanya itu yang perlu Anda lakukan untuk saat ini. Saat diminta, pilih proyek yang Anda inginkan untuk memasang PostSharp dan klik OK. Setelah penginstalan selesai, Anda siap menggunakan PostSharp di aplikasi Anda.

Pemrograman PostSharp

Setelah PostSharp diinstal, Anda dapat mulai menggunakannya di aplikasi Anda. Untuk melakukan ini, Anda perlu membuat satu atau beberapa aspek untuk digunakan aplikasi Anda. Salah satu cara untuk mengimplementasikan AOP dalam aplikasi Anda adalah melalui penggunaan atribut. Setelah aspek Anda ditentukan, Anda akan ingin menerapkan aspek tersebut ke program Anda melalui atribut.

Di Jendela Solution Explorer, pilih proyek Anda, klik kanan, dan tambahkan kelas baru bernama ExceptionAspect. Perhatikan bahwa aspek yang diperlukan untuk menangani pengecualian dalam aplikasi Anda harus berasal dari kelas OnExceptionAspect pustaka PostSharp. OnExceptionAspect menyertakan metode yang disebut OnException yang perlu Anda ganti untuk menangani pengecualian. Kode berikut menggambarkan kelas aspek pengecualian kustom kami.

[Serializable]

    public class ExceptionAspect : OnExceptionAspect

    {

        public override void OnException(MethodExecutionArgs args)

        {

            Console.WriteLine("Error occured at: "+

            DateTime.Now.ToShortTimeString() + " Error Message: "+

            args.Exception.Message);

            args.FlowBehavior = FlowBehavior.Continue;

            base.OnException(args);

        }

    }

Setiap aspek harus dapat diserialkan - perhatikan penggunaan atribut [Serializable] di kelas ExceptionAspect yang ditunjukkan di atas. Sekarang setelah aspeknya berada, Anda bisa menerapkannya pada satu atau beberapa metode dalam aplikasi Anda menggunakan atribut. Cuplikan kode berikut mengilustrasikan metode sampel untuk menerapkan aspek pengecualian yang baru saja dibuat.

[ExceptionAspect]

 public static void TestExceptionAspect()

  {

      throw new Exception("This is a test message");

  }

Anda dapat menerapkan aspek pengecualian khusus yang baru saja dibuat ke satu atau beberapa metode dalam aplikasi - atau bahkan di tingkat kelas. Jika aspek diterapkan di tingkat kelas, pengecualian yang dilemparkan oleh salah satu metode kelas akan ditangani. Aspek PostSharp juga dapat diterapkan di seluruh perakitan. Fitur ini dikenal sebagai Multicast, dan dapat diterapkan ke namespace target dengan menentukan pernyataan berikut di file AssemblyInfo.cs:

[assembly: ExceptionAspect (AttributeTargetTypes = "PostSharp. *")]

"PostSharp. *" Dalam potongan kode di atas mengacu pada semua tipe yang ada di dalam namespace PostSharp.

Kelas OnMethodBoundaryAspect memungkinkan Anda mengeksekusi kode kustom sebelum dan sesudah eksekusi metode. Sementara metode OnEntry dijalankan sebelum eksekusi metode yang aspeknya diterapkan, metode OnExit dijalankan setelah eksekusi metode Anda. Daftar kode berikut mengilustrasikan bagaimana Anda dapat mengukur waktu eksekusi metode menggunakan aspek. Kelas ExecutionTimeAspect di bawah ini mendapatkan kelas OnMethodBoundaryAspect dan menggantikan metode OnEntry dan OnExit.

 [Serializable]

    public class ExecutionTimeAspect : OnMethodBoundaryAspect

    {

        [NonSerialized]

        Stopwatch stopWatch;

        public override void OnEntry(MethodExecutionArgs args)

        {

            stopWatch = Stopwatch.StartNew();

            base.OnEntry(args);

        }

        public override void OnExit(MethodExecutionArgs args)

        {

            string method = new

            StackTrace().GetFrame(1).GetMethod().Name;

            string message = string.Format("The method: [{0}] took

            {1}ms to execute.",

                        method, stopWatch.ElapsedMilliseconds);

            Console.WriteLine(message);

            base.OnExit(args);

        }

    }

Anda juga dapat mengubah metode OnExit di atas untuk mencatat waktu eksekusi metode. Sekarang setelah aspek Anda siap digunakan, aspek tersebut dapat diterapkan pada satu atau beberapa metode untuk mengambil waktu eksekusi.

[ExecutionTimeAspect]

public static void TestExceptionAspect()

{

   //Some code

}

Anda dapat mempelajari lebih lanjut tentang PostSharp dengan membaca dokumentasi.