2012-01-21 14 views
0

これは工場出荷時のパターンの「不健全」使用である場合、私は思っていた、またはそれは完全に合理的である場合:工場パターンの 'Unwholesome' use?

<?php //ConnectionFactory.class.php 

    /** 
    * Generates prepared mysqli connection instances 
    */ 
    class ConnectionFactory { 
     public static function make(){ 
      $c = new mysqli('localhost', 'testusername', 'fakepassword'); 
      if ($c->connect_error) throw new ConnectionException("Connection failed"); 
      return $c; 
     } 
    } 
    class ConnectionException extends Exception {} 
?> 

それとも事前に引数を持つmysqliのクラスの拡張がより適切でしょうか?私はこれをやろうと考えていましたが、mysqliクラスの「純度」に違反しているように感じました。たぶん私はあまりにも多くのことを考えています。

私の使用法は、データベーストランザクションを行う多くのクラスを持つことに由来します。すべての例で私はusername/password/host/etcがそれぞれの使用法に書き直されているのを見てきましたが、これは非常にOOPのようには見えません。

私はシングルトンを使うのが本当に好きですが、これは私にはそのような絶好の機会です(私が理解しているようにパフォーマンスが大幅に向上する接続が必要です)。彼らはOOPがんとみなされていると聞き、誘惑を避けようとしています。

おそらく問題は、私は非常に多くの場所でmysqliクラスを使用すべきではなく、静的な 'do query'関数などのクラスを使用するべきであるということです。被験者のすべての考えが大きく訴えられます

答えて

0

あなたは問題を分析していません。データベース接続の完璧な実装を決めることができない場合は、何もすることはありません。

これは、1つの接続がプロセスごとに開かれていることを確認することが、難解なOOPガイドラインよりも重要であるため、シングルトンが意味をなさない場合があります。

あなたは薄いdb抽象化の作成を検討しているようですが、mysqliオブジェクトを直接操作するコードよりも少し上手かもしれませんが、これはよく磨耗している領域であることを認識する必要があります。あなたが本当にデータベースに惑わされたくないのであれば、PDOや他のDB抽象化ツールやマッピングツールを使うだけです。

直接mysqli相互作用の代わりにmysqliプロキシオブジェクトを持つことは、実際にはdbアジノスクリプトを達成しませんが、他の利点があります。カスタムクエリーロギング、SQL健全性チェック、シャーディングロジック、その他数多くのものが、あなたの薄いdbラッパーの中に生きることができます。私はあなたのプロキシオブジェクトを記述し、それをいくつかの静的変数またはシングルトンのどこかでインスタンス化し、それを良いものと呼んでいます。 OOPナチスは、あなたがより重要なことに移っている間、その完璧な議論を継続することができます。

+0

あなたはそうです、これは簡単な問題のために考え過ぎています...私は主に私のOOPの原則を固めようとしています。 PDOタイプのソリューションを探しているわけではありません(私はまだアクセス抽象化に使用していません)。 私が探しているのは、私のアクセスタイプを「テンプレート化」する方法です...ユーザー名/パスワードをあちこちに書き直す必要はありません。私はmysqliがINIファイルに 'デフォルト'のデータを格納できることに気付きました。それは巨大なセキュリティ問題ではありませんか? – 1owk3y

関連する問題