Dalam aplikasi Delphi 2007 kami, kami menggunakan banyak konstruksi berikut
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass melakukan perjalanan hierarki pemilik komponen saat ini ke atas untuk menemukan kelas tertentu (dalam contoh TdmBasicData). Objek yang dihasilkan disimpan dalam variabel Field FdmBasic. Kami menggunakan ini terutama untuk melewatkan datamodules.
Contoh: Saat membuat laporan, data yang dihasilkan dikompresi dan disimpan dalam bidang gumpalan tabel yang diakses melalui datamodule TdmReportBaseData. Dalam modul terpisah dari aplikasi kami, ada fungsi untuk menampilkan data dari laporan dalam formulir Paged menggunakan ReportBuilder. Kode utama modul ini (TdmRBReport), menggunakan kelas TRBTempdatabase untuk mengonversi data gumpalan terkompresi menjadi tabel yang berbeda yang dapat digunakan dalam reportdesign runtime reportdesigner runtime Reportbuilder. TdmRBReport memiliki akses ke TdmReportBaseData untuk semua jenis data terkait laporan (jenis laporan, pengaturan perhitungan laporan, dll). TRBTempDatabase dibuat di TdmRBReport tetapi harus memiliki akses ke TdmReportBasedata. Jadi ini sekarang dilakukan dengan menggunakan konstruksi di atas:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
Perasaan saya adalah ini berarti bahwa TRBTempDatabase tahu banyak tentang pemiliknya, dan saya bertanya-tanya apakah ini semacam bau kode atau Anti-pola.
Apa pendapat anda tentang ini? Apakah ini bau kode? Jika demikian, apa cara yang lebih baik?