2011-09-17 12 views
6

私は現在、PHP Webアプリケーションでローカリゼーションを扱ういくつかのクラスを作成しています。この循環依存関係を取り除くにはどうすればよいですか?

クラスは次のとおりです。

  • ロケール - ユーザーのロケールを設定し、取得とお得な情報、タイムゾーン、言語。
  • LocaleFormat - 日付、照合、通貨フォーマットなどのフォーマットを扱います。
  • タイムゾーン - タイムゾーンに関連する国やその他の機能のタイムゾーンのリストを作成することをお勧めします。
  • LocaleData - ロケールデータを取得します。たとえば、アドレス形式やポストコードの正規表現などがあります。

アプリケーション全体が正常に動作しますが、タイムゾーンにもう少し追加する必要があります。

この結果、この問題が発生します。 ロケールには、ロケールのメソッドを必要とするLocaleDataのメソッドを必要とするTimezoneのメソッドが必要です。

この循環依存性をどのように壊すことができますか?私はクラスを小さなものに分割する必要がありますか?これに対処するパターンはありますか?

乾杯:)

答えて

2

あなただけの他のクラスからメソッドを呼び出している場合は、最初にすべてのクラスをロードし、その後、あなたはクラス間のメソッドを呼び出すことができます。クラスファイル内で初期化を実行しないでください。ファイルを "インクルード"する別の "ローダー"ファイルで実行してから、初期化を呼び出します。

他のクラスを拡張するクラスに基づいて循環依存を取得する場合は、セットアップ全体を再考する必要があります。

+0

私が直面していた問題は、互いにメソッドを呼び出すクラスのためでした。私はDIフレームワークを使用してコンストラクタインジェクションを使用しているので、依存性はDIフレームワークによってインスタンス化されます。その解決策は、Timezoneにフォーマッタのように動作するメソッドがあるため、私はLocaleFormatに移動しました。 – F21