Nella nostra applicazione Delphi 2007 stiamo usando molti dei seguenti costrutti
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass sposta la gerarchia del proprietario del componente corrente verso l'alto per trovare una classe specifica (nell'esempio TdmBasicData). L'oggetto risultante è memorizzato nella variabile Field FdmBasic. Lo usiamo principalmente per trasmettere moduli di dati.
Esempio: quando si genera un report, i dati risultanti vengono compressi e memorizzati in un campo BLOB di una tabella a cui si accede tramite un modulo di dati TdmReportBaseData. In un modulo separato della nostra applicazione, è disponibile una funzionalità per mostrare i dati dal report in un modulo Paged utilizzando ReportBuilder. Il codice principale di questo modulo (TdmRBReport) utilizza una classe TRBTempdatabase per convertire i dati BLOB compressi in diverse tabelle utilizzabili nel reportdesigner di runtime di Reportbuilder. TdmRBReport ha accesso a TdmReportBaseData per tutti i tipi di dati relativi al rapporto (tipo di rapporto, impostazioni di calcolo del rapporto, ecc.). TRBTempDatabase è costruito in TdmRBReport ma deve avere accesso a TdmReportBasedata. Quindi questo è ora fatto usando la costruzione sopra:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
La mia sensazione è che ciò significhi che TRBTempDatabase conosce molto il suo proprietario e mi chiedevo se si tratta di una sorta di odore di codice o Anti-pattern.
Quali sono le tue idee riguardo a questo? È un odore di codice? In tal caso, qual è il modo migliore?