Delphi 2007アプリケーションでは、次の構成要素の多くを使用しています
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClassは、現在のコンポーネントの所有者階層を上に移動して、特定のクラスを検索します(例ではTdmBasicData)。結果のオブジェクトは、フィールド変数FdmBasicに格納されます。これは主にデータモジュールを渡すために使用します。
例:レポートを生成するとき、結果のデータは圧縮され、データモジュールTdmReportBaseDataを介してアクセスされるテーブルのBlobフィールドに格納されます。アプリケーションの別のモジュールには、ReportBuilderを使用して、レポートのデータをページ形式で表示する機能があります。このモジュールのメインコード(TdmRBReport)は、クラスTRBTempdatabaseを使用して、圧縮されたblobデータを、Reportbuilderランタイムレポートデザイナーで使用可能なさまざまなテーブルに変換します。TdmRBReportは、あらゆる種類のレポート関連データ(レポートのタイプ、レポート計算設定など)のTdmReportBaseDataにアクセスできます。TRBTempDatabaseはTdmRBReportで構築されますが、TdmReportBasedataにアクセスできる必要があります。したがって、これは上記の構成を使用して行われます。
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
私の考えでは、これはTRBTempDatabaseがその所有者の多くを知っていることを意味し、これがなんらかのコードの匂いやアンチパターンなのかどうか疑問に思っていました。
これについてどう思いますか?これはコードのにおいですか?もしそうなら、より良い方法は何ですか?