Membuat Aplikasi Modular secara Dinamis

August 14, 2008 at 8:55 am | Posted in Tutorials | 5 Comments
Tags:

oleh: Jaimy Azle

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.

5 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Thx Mas,

    Aku blom coba sich, tapi trick ini memang salah satu yang lagi saya explore, cuma karena waktu untuk explore lagi sempit banget, ada tips ini terasa sangat membantu sekali.

    Matur nuwun mas

  2. wah hebat,
    pengen mrogram ky gini, tp kynya susah ya?

  3. Sial, sial… Sodara-sodara semuanya, tolong beri saya semangat supaya saya bisa segera buat posting meskipun sederhana. Awas kamu Bee!😉

  4. Waduh masih kurang paham je .. untuk pemakaian dalam skala besarnya seperti apa, karena selama ini klo buat ya manual create2x begitu lah. Tapi Terimakasih sekali atas infonya jadi lebih concern lagi dengan delphi🙂

  5. oh…. gini ya caranya.. thanks ya.. sangat membantu


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: