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. :)

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.
My name is 
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
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
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