は、我々は上向き(例TdmBasicDataに)特定のクラスを検索するには、次の構文オブジェクトが所有者の多くを知っている場合は、コードのにおいですか?私たちのデルファイ2007アプリケーションで
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClassは、現在のコンポーネントの所有者の階層を移動するの多くを使用しています。結果のオブジェクトは、Field変数FdmBasicに格納されます。これは、主にデータモジュールを渡すために使用します。
例: レポートを生成すると、結果のデータは圧縮され、データモジュールTdmReportBaseDataを介してアクセスされるテーブルのBlobフィールドに格納されます。アプリケーションの別のモジュールには、ReportBuilderを使用してレポートからのデータをPaged形式で表示する機能があります。このモジュール(TdmRbreport)のメインコードは、クラスTRBTempdatabaseを使用して、圧縮BLOBデータをReportbuilderランタイムreportdesignerで使用可能な異なるテーブルに変換します。 TdmRbreportは、あらゆる種類のレポート関連データ(レポートの種類、レポートcalculationsettingsなど)のTdmReportBaseDataにアクセスできます。 TRBTempDatabaseはTdmRbreportで構築されますが、TdmReportBasedataにアクセスできる必要があります。
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
私の気持ちは、これはTRBTempDatabaseは、その所有者の多くを知っていることを意味していることであり、これはコードのにおいやアンチパターンのいくつかの並べ替えがある場合、私は思っていた:これは今の上に建設を使用して行われます。
これについてのご意見はありますか?これはコードのにおいですか?もしそうなら、もっと良い方法は何ですか?
コードのにおい? :)) http://en.wikipedia.org/wiki/Code_smell – Shinnok
それは可能性があります。 *現在のオブジェクト*を単体テストするのはどれくらい簡単ですか?所有者の依存関係のために難しい場合、私はそれを扱うものと考えています。あなたはDependancy Injectionで構造体を置き換えることができます。 –
@Lieven - 私たちはユニットテストをしていません。実際には私はそれについて読んで始め、それについて非常に熱心になってきました。この読書が私に上記の構造について考えさせてくれたと思う... – Bascy