依存関係の除去
コンポーネント作成の詳細:インデックス への移動
コンポーネントの有用性を高める 1 つの特性は,コンポーネントがコード内の任意の場所で実行できる処理への制限がないことです。コンポーネントは性格上,さまざまな組み合わせ,順序,状況において,アプリケーションに組み入れられます。前処理を必要とせず,あらゆる状況で機能するようなコンポーネントを設計しなければなりません。
依存関係除去の例として,TWinControl の Handle プロパティがあります。Windows アプリケーションを作成したことがあればわかるように,CreateWindow という API 関数を呼び出してウィンドウコントロールを作成する前に,そのウィンドウコントロールにアクセスすることはできません。これは,プログラムを実行する際に最もエラーを起こしやすい点の 1 つです。Delphi ウィンドウコントロールでは,ユーザーはこの点について考慮する必要はありません。ウィンドウハンドルが必要なときは常にそのハンドルが有効だからです。コントロールは,ウィンドウハンドルを表すプロパティを参照すれば,そのウィンドウが作成済みであるかどうかを検査できます。ハンドルが有効でない場合は,コントロールはウィンドウを作成してハンドルを返します。こうして,アプリケーションのコードが Handle プロパティをアクセスしたときは,常に有効なハンドルを得られることが保証されます。
Delphi コンポーネントでは,ウィンドウの作成などの処理がバックグラウンドで実行されるため,開発者は本来の作業に専念できます。ウィンドウハンドルを API 関数に渡す前に,あらかじめハンドルが存在するかどうかを確認したり,ウィンドウを作成するというような作業は必要ありません。アプリケーション開発者は,誤った状態にならないように絶えずチェックする必要はなく,意図したとおりに処理が行われることを確信できます。
依存関係を持たないコンポーネントを作成するのは時間がかかるかもしれませんが,そのような時間は一般に有意義なものです。なぜなら,それによってアプリケーション開発者が単調な作業を繰り返し行う必要がなくなるだけでなく,マニュアルの作成やサポートにかかる負担が減少するからです。