Delphi 2007 uygulamamızda aşağıdaki yapıların çoğunu kullanıyoruz
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass belirli bir sınıfı bulmak için geçerli bileşenin Sahip hiyerarşisini yukarı doğru hareket ettirir (TdmBasicData örneğinde). Sonuçta elde edilen nesne FdmBasic Alan değişkeninde saklanır. Bunu öncelikle veri modüllerini iletmek için kullanıyoruz.
Örnek: Bir rapor oluştururken, elde edilen veriler sıkıştırılır ve bir veri modülü TdmReportBaseData üzerinden erişilen bir tablonun Blob alanında depolanır. Uygulamamızın ayrı bir modülünde, ReportBuilder kullanarak rapordaki verileri Disk belleği biçiminde gösterme işlevi vardır. Bu modülün ana kodu (TdmRBReport), sıkıştırılmış blob verilerini Rapor Oluşturucusu çalışma zamanı rapor tasarımcısında kullanılabilen farklı tablolara dönüştürmek için bir TRBTempdatabase sınıfı kullanır. TdmRBReport, raporla ilgili her türlü veri (rapor türü, rapor hesaplama ayarları vb.) İçin TdmReportBaseData öğesine erişebilir. TRBTempDatabase, TdmRBReport içinde oluşturulmuştur, ancak TdmReportBasedata'ya erişimi olmalıdır. Yani bu şimdi yukarıdaki yapı kullanılarak yapılır:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
Benim duygu bu TRBTempDatabase sahibinin çok şey biliyor anlamına gelir ve bu bir tür kod kokusu veya Anti-desen olup olmadığını merak ediyordum.
Bunun hakkında görüşleriniz neler? Bu bir kod kokusu mu? Eğer öyleyse, daha iyi bir yol nedir?