J.a.i.m’s Diary

Membuat Aplikasi Modular secara Dinamis

Aplikasi yang bersifat modular sebenarnya tidaklah asing saat ini, dengan memecah kompleksitas software ke dalam sejumlah modul akan memudahkan developer memaintain lifetime aplikasi yang dibuatnya secara lebih baik, hal ini karena developer dapat lebih memfokuskan permasalahan pada modul-modul yang ada. Delphi secara RAD sebenarnya sudah mempermudah developer untuk menyusun aplikasi ini sebagai modul-modul yang disusun baik dengan memanfaatkan TDataModule ataupun TForm. Namun seringkali pula kita terjebak dalam proses pangil memanggil modul satu dengan modul yang lain yang biasanya dilakukan secara langsung seperti contoh berikut:


  with TForm2.Create(Self) do
  try
    ShowModal;
  finally
    Free;
  end;

Tidak salah sebenarnya, namun proses panggil memanggil seperti ini menjadikan aplikasi menjadi kompleks, karena modul pemanggil sebagai aplikasi utama harus menyertakan pula unit atas modul-modul yang akan dipanggil. Program berskala yang lebih besar semacam dan kompleks akan melibatkan puluhan, ratusan, atau bahkan ribuan modul di dalamnya, apakah untuk program semacam ini semua modul tersebut harus disertakan? tentunya akan lebih baik bila modul-modul itu dapat dipanggil secara dinamis dan otomatis oleh pemanggil dengan mudah. Kita cukup membuat modulnya, meregistrasikannya, dan recompile. Aplikasi utama akan secara otomatis menampilkan modul baru tersebut. :)

Dynamic modular application


Bagaimana Caranya?

Delphi sebagai bahasa yang mendukung OOP menyediakan Class Abstraction yang bisa kita manfaatkan untuk membuat modular sistem secara dinamis. Dalam hal ini kita bisa memulainya dengan membuat class Abstract Module yang akan menjadi class dasar yang digunakan oleh aplikasi utama untuk memanggil modul-modul yang terdapat dalam aplikasi secara keseluruhan.


  TAbstractModule = class(TComponent)
  public
    procedure Execute; virtual; abstract;

    class function ModuleName: string; virtual;
    class function ModuleDesc: string; virtual;
  end;
  TAbstractModuleClass = class of TAbstractModule;

...
...

class function TAbstractModule.ModuleDesc: string;
begin
  Result := 'Undefined';
end;

class function TAbstractModule.ModuleName: string;
begin
  Result := 'Undefined';
end;

Kemudian langkah selanjutnya, setiap modul yang akan dibuat menjadi dinamis harus dibuat sebagai class dan diturunkan dari abstract module di atas.


  TTestModule1 = class(TAbstractModule)
  public
    procedure Execute; override;

    class function ModuleName: string; override;
    class function ModuleDesc: string; override;
  end;

...
...

class function TTestModule1.ModuleDesc: string;
begin
  Result := 'This is a Test Module #1 Description';
end;

class function TTestModule1.ModuleName: string;
begin
  Result := 'Test Module 1';
end;

Selanjutnya jangan lupa, ini bagian terpentingnya, dibagian paling bawah, registerkan setiap modul class yang dibuat pada class registration punyanya delphi.


initialization
  RegisterClass(TTestModule1);

finalization
  UnRegisterClass(TTestModule1);

Sampai di sini apa yang harus dilakukan di sisi modulnya telah selesai, kini tinggal di program utama (Main Form). Ada beberapa hal yang harus dilakukan di sini, yaitu meng-construct list module dan membuat generic event yang akan mencari class yang sesuai saat user memilih modul tersebut.


procedure TfrmMain.CollectModules;
var
  AClassFinder: TClassFinder;
begin
  ListBox1.Clear;
  AClassFinder := TClassFinder.Create(TAbstractModule);
  try
    AClassFinder.GetClasses(EvaluateClass);
  finally
    AClassFinder.Free;
  end;
end;

procedure TfrmMain.EvaluateClass(AClass: TPersistentClass);
begin
  if (AClass.InheritsFrom(TAbstractModule)) and (AClass <> TAbstractModule)  then
  begin
    ListBox1.AddItem(Format('%s - %s',
      [
        TAbstractModuleClass(AClass).ModuleName,
        TAbstractModuleClass(AClass).ModuleDesc
      ]),
      TObject(AClass)
    );
  end;
end;

Nah selesai, dengan trik sederhana ini, kita bisa memanfaatkan fitur-fitur standar yang ada pada delphi untuk membuat aplikasi modular secara dinamis. Jika tertarik dengan demo dan source dari artikel ini, anda bisa mendownloadnya di sini.

C.O.M.M.E.N.T.S:

Listed below are comments from my friends regarding to this entry. If you wish, you may also add a comment by clicking new comment.

  1. Artikel yang menarik. Kebetulan saya sedang mempelajarinya. Adakah referensi lain seputar modular programming yang Anda ketahui? Mungkin bisa dalam bentuk situs/buku/eBook.

    Comment by AutoPilot — 18 September, 2008 @ 2:49 am

  2. Saya masih kurang paham tentang hal ini .. terutama tentang kelebihannya disebelah mana ? :D Maklum masih beginner mas.
    Salam kenal

    Comment by Andi Eko — 1 December, 2008 @ 5:15 am

  3. salah satu hal yang menarik dari model seperti ini adalah kita benar-benar bisa berfokus pada modul yang kita kerjakan tanpa sedikitpun merubah source code yang tidak terkait, misalnya dalam contoh ini: program utama, kita tidak perlu membuat adjustment/menu/dll di program utama supaya bisa memanggil modul yang kita buat, dengan demikian kita bisa meningkatkan efisiensi waktu development sekaligus meminimalisir kesalahan yang tidak perlu dilakukan.

    Comment by admin — 1 December, 2008 @ 7:56 am

RSS feed for comments on this post. TrackBack URL

Leave a comment:








 

About Me

Jaimy Azle My name is
Jaimy Azle, hufflepuff, I am a software developer with Delphi and C/C++ as major programming language. Living in Ungaran, Jawa Tengah.

Search

Categories:

Tag Cloud

Archives:

Meta:


Get Firefox!
Perhatian: Informasi yang terdapat disini bener-bener hanya merepresentasikan cerita, pengalaman, ataupun pandangan yang merupakan opini pribadi dari saya sebagai ego. Segala hal yang bersifat pandangan ke depan sebenarnya lebih bersifat spekulatif dan bisa saja berobah meski saya bukan bunglon.