Aspect Oriented Programming Sederhana dengan Spring.Net IoC

|
Share


Akhir akhir ini entah kenapa saya sering mendengar suatu pepatah yang kira kira bunyinya seperti ini "Kenyamanan orang manajemen itu berbanding lurus dengan kesengsaraan orang IT". Pepatah tersebut bisa diartikan bahwa semakin nyaman orang manajemen maka semakin sengsara juga orang IT. Karena dalam hal ini orang manajemen bertindak sebagai end user dari produk produk yang dibuat oleh orang orang IT. Biasanya, orang manajemen tidak mau tahu bagaimana caranya, pokoknya program yang ia gunakan harus bisa sesuai dengan keinginannya. Selain itu jika terjadi perubahan "keinginan" dari orang manajemen tersebut, program harus bisa dengan cepat menyesuaikan dengan effort dan biaya sekecil kecilnya, bahkan jika bisa tanpa mengeluarkan biaya. >_<"
Dikarenakan hal tersebutlah paradigma programming yang selama ini berkiblat pada Object Oriented sedikit demi sedikit dialihkan ( ato lebih tepatnya diperbaiki ) pada yang namanya Aspect Oriented. Aspect Oriented programming adalah suatu pola pikir yang lebih modular dari pada object oriented maupun function oriented. Jika konsep function oriented priogramming membawa kita untuk berpikir modular pada level fungsi/method dan object oriented programming pada level class/object kali ini aspect oriented programming akan membawa kita untuk berpikir modular pada level code of object calling. Bagaimana maksudnya..???

Nah disinilah library Spring.Net IoC ( Inversion of Control ) itu mengambil perannya. Pada intinya, pada paradigma aspect oriented programming kita sangat dilarang untuk melakukan instansiasi object secara langsung dengan menggunakan keyword "new". Instansiasi object kali ini dilakukan dengan cara yang lebih dinamis dengan menggunakan library Spring.Net IoC tersebut. Sehingga meski aplikasi telah dideploy, kita masih bisa menambah object object yang akan dipanggil, tanpa harus merubah aplikasi utama kita.
Sebagai contoh adalah studi kasus berikut ini, pada sebuah pabrik otomotif, mulanya hanya memiliki 2 macam jenis kendaraan yang diproduksi, yaitu sepeda motor dan mobil. Akan tetapi setelah berjalan sekian waktu, parbik tersebut memutuskan untuk juga memproduksi speed boat. Nah tentunya hal ini, juga sedikit berdampak pada perangkat lunak sistem informasi dari perusahaan tersebut. Disinilah peran AOP yang digunakan untuk menekan biaya perubahan terhadap perangkat lunak sistem informasi perusahaan tersebut.
Ok, langsung aja menuju bagaimana meng-implementasikan konsep AOP tadi menggunakan library spring.net. Ikuti saja langkah langkah berikut ini :
Untuk library Spring.Net bisa didownload disini
Langkah Pertama : Buatlah hierarki class yang memanfaatkan sebuah interface sebagai base classnya
Interface
using System;

namespace SpringIoC
{
    public interface IVehicle
    {
        string GetVehicleType();
    }
}
Class Motorcycle
using System;

namespace SpringIoC
{
    public class Motorcycle : IVehicle
    {
        public string GetVehicleType()
        {
            return "Motorcycle";
        }
    }
}

Class Car
using System;

namespace SpringIoC
{
    public class Car : IVehicle
    {
        public string GetVehicleType()
        {
            return "Car";
        }
    }
}
Class Motorboat
using System;

namespace SpringIoC
{
    public class Motorboat : IVehicle
    {
        public string GetVehicleType()
        {
            return "Motorboat";
        }
    }
}
Langkah Kedua : Menambahkan App.config
Setelah membuat 3 buah class yang meimplement sebuah inteface seperti diatas, maka sekarang tambahkan App.Config ke program anda seperti gambar dibawah ini :
Setelah itu, ubahlah file tersebut menjadi seperti ini
<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <configSections>

    <sectionGroup name="common">

      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />

    </sectionGroup>

    <sectionGroup name="spring">

      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>

      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>

    </sectionGroup>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

  </configSections>



  <spring>

    <context>

      <resource uri="assembly://SpringIoC/SpringIoC/AppContext.xml" />

    </context>

  </spring>

</configuration>


Langkah Ketiga : Menambahkan class generator 
Class ini digunakan untuk memanggil object secara dinamis dengan tidak melalui keyword "new"
using System;
using System.Collections.Generic;

namespace SpringIoC
{
    public class VehicleGenerator
    {
        private IVehicle vehicle;

        public IVehicle Vehicle
        {
            set { vehicle = value; }
        }

        public VehicleGenerator()
        {
 
        }

        public void GetVehicleType()
        {
            Console.WriteLine("Vehicle Type : " + vehicle.GetVehicleType());
        }
    }
}

Langkah Keempat : Tambahkan AppContext.xml
Setelah menambahkan file AppContext.xml, jangan lupa meubah properties build actionnya menjadi Embedded Resource
File AppContext.xml tersebut diisi reference dari class yang kita buat tadi, seperti berikut ini
<?xml version="1.0" encoding="utf-8" ?>

<objects xmlns="http://www.springframework.net">

  <description>Spring.Net IoC</description>



  <object id="Vehicle1" type="SpringIoC.VehicleGenerator, SpringIoC">

    <property name="Vehicle" ref="MyMotorcycle"/>

  </object>



  <object id="Vehicle2" type="SpringIoC.VehicleGenerator, SpringIoC">

    <property name="Vehicle" ref="MyCar"/>

  </object>

  

  <object id="Vehicle3" type="SpringIoC.VehicleGenerator, SpringIoC">

    <property name="Vehicle" ref="MyMotorboat"/>

  </object>

  

  <object id="MyMotorcycle" type="SpringIoC.Motorcycle, SpringIoC"/>

  <object id="MyCar" type="SpringIoC.Car, SpringIoC"/>

  <object id="MyMotorboat" type="SpringIoC.Motorboat, SpringIoC"/>

</objects>

Langkah Kelima :Menambahkan library references pada project kita


Langkah Keenam : Membuat class main yang digunakan untuk meng-uji coba
Buatlah class main seperti
using System;
using System.Collections.Generic;
using Spring.Context;
using Spring.Context.Support;

namespace SpringIoC
{
    class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            VehicleGenerator generator = (VehicleGenerator)ctx.GetObject("MyVehicle1");
            Console.Write("Your First ");
            generator.GetVehicleType();
            generator = (VehicleGenerator)ctx.GetObject("MyVehicle2");
            Console.Write("Your Second ");
            generator.GetVehicleType();
            generator = (VehicleGenerator)ctx.GetObject("MyVehicle3");
            Console.Write("Your Third ");
            generator.GetVehicleType();
        }
    }
}

Jika tidak terjadi error apapun, maka setelah dicompille dan dirun, program diatas akan menghasilkan output seperti gambar dibawah ini :

Dan tetaplah ingat "Tidak Ada Keyword new Diantara Kita ^_^V"

Untuk contoh program diatas bisa didownload disini

2 komentar:

Noor Fitria Azzahra's Zone mengatakan...

wah.. Jojo.........

Yohanda Mandala mengatakan...

Ada apa fit...???? heheeeee
Stay Tuned In My Beloved Blog ya... heheeeee

Poskan Komentar

 

©2009 Yohanda's Web Blog