2011-07-14 15 views
0

現在、いくつかの設定をデータベーステーブルに保存しています。 2つのフィールド(setting_name、setting_value)があります。設定テーブルの設定モデル

私のすべてのモデルは、これらの設定にアクセスする必要があります(たとえば、クエリが最大で返すレコードの数を決定する設定があります)。しかし、良いOOプラクティスで実装する方法がわかりません。これを受け入れる/良い方法があるのですか(すべてのモデルが設定にアクセスできます)?

また、これらの設定をキャッシュする必要があります(実際にはページロードごとに1つのクエリになります)。

おかげ

答えて

2

は私がサービスコンテナ別称、私の依存性注入コンテナを介してこれを処理します。コンテナが初期化されたら、単にクエリを実行して、すべてのコンフィグレーション設定から連想配列(実際はArrayObject)を作成します。次に、この配列をサービスコンテナ内のサービスとして登録します。そうすれば、私のアプリケーション全体で簡単に次のような設定にアクセスできます。

$config = $this->container->get('configuration'); 
do_something($config['bar']); 
+0

別のスレッドによると、そのようなサービスコンテナも悪いです:http://stackoverflow.com/questions/6034748/if-singletons-are-bad-why-a-service-container-is-goodあなたの意見は何ですかこれ?私はすべてのオプションと混同して、どちらが良いか悪いかを決める: – Bv202

+0

@ Bv202:あなたは間違った他の質問を読んでいる。多くの依存性注入コンテナはサービスコンテナとして倍増します。 DIを持たないSCはシングルトンと同じくらい悪い(意見はどれくらい悪いかによって異なります)。 DICであるSCは、それを隠す代わりに依存関係を公開するため、悪ではありません。 –

1

この問題の解決方法はシングルトンパターンです。

あなたは、設定値を取得するための静的メソッドを持つ単一インスタンスクラスを持っている必要があります。

Config::getConfigData($conf_key) 

キャッシュ: それはあなたがあなたのデシベルを持っているどのように多くのコンフィギュレーション・データに依存します。私はそれらをキャッシュし、あなたが価値を必要とするたびにクエリを実行しないことをお勧めします。

+0

私はすでにシングルトンのことを思っていましたが、それについて話し始めると、シングルトンが悪い理由について多くの否定的な反応と意見が出ます。この状況で使うのは良いことですか? – Bv202

+0

http://www.geekpad.ca/blog/post/simple-php-config-file-using-singletonおよびhttp://www.ibm.com/developerworks/library/os-php-config/indexを参照してください。詳細はhtmlを参照してください。 –

関連する問題