En nuestra aplicación Delphi 2007 estamos usando muchas de las siguientes construcciones
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass recorre la jerarquía de Propietario del componente actual hacia arriba para encontrar una clase específica (en el ejemplo TdmBasicData). El objeto resultante se almacena en la variable de campo FdmBasic. Usamos esto principalmente para pasar módulos de datos.
Ejemplo: al generar un informe, los datos resultantes se comprimen y almacenan en un campo Blob de una tabla a la que se accede a través de un módulo de datos TdmReportBaseData. En un módulo separado de nuestra aplicación, hay una funcionalidad para mostrar los datos del informe en un formulario Paged usando ReportBuilder. El código principal de este módulo (TdmRBReport) utiliza una clase TRBTempdatabase para convertir los datos de blobs comprimidos en diferentes tablas que pueden utilizarse en el diseñador de informes de tiempo de ejecución de Reportbuilder. TdmRBReport tiene acceso a TdmReportBaseData para todo tipo de datos relacionados con el informe (tipo de informe, configuración de cálculo de informes, etc.). TRBTempDatabase está construido en TdmRBReport pero tiene que tener acceso a TdmReportBasedata. Entonces esto se hace usando la construcción anterior:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
Mi sensación es que esto significa que TRBTempDatabase conoce mucho a su propietario, y me preguntaba si esto es algún tipo de olor a código o Anti-patrón.
¿Qué piensas sobre esto? ¿Es este un olor a código? Si es así, ¿cuál es una mejor manera?