質問
OOP PHPフレームワークの中で、「ユーティリティ」の機能に対処するための最良の方法は何ですか?今、私たちはシステム全体で必要とされているいくつかの機能を使用してファイルを持っています。 (例えば、値および配列を受け付け、入力配列と同じ割合と同じキーに分布値を持つ配列を返すdistribute()
機能のため。)
私はいつもそれがありませんので、すべてのオブジェクト指向のことを使用して「汚い」と感じています。静的メソッドなど、さまざまなクラスにこれらを移動するための優れた実践である、またはそれはちょうどセマンティック回避策ですか?それともそこにちょうどいくつかのものは、OOPの構造から外れることになるだろう枠組みの中でのレベルになるだろう?
解決
私はいつもこのような質問の詳細実利てきます。
あなたは、フルOOPを移動したい場合は、、あなたは明らかにクラスにこれらを守らなければなりません。彼らは本当にあらゆる種類のオブジェクトを表すものではないので、しかし、これらのクラスは、コンテナクラスになるだろうされます。
また:クラスを使用すると、いずれかのシングルトンパターンを使用するか、すべての機能を静的に宣言し、そのクラスのインスタンスを持っているあなたを必要とします。第二と第三のものは役に立たない単なる単にOOPラッパーであるが、 - 最初のものは(特にPHPのようなインタプリタ言語で大丈夫、のような多くのが、大きな枠組みの中で物事があまりにも、大規模な取得することではないかもしれません)遅いです関数のセット(特に第三のアプローチ)のための
編集:間違って私を証明して自由に感じます。私は次のようになります。私も経験していないことだし、常にそのようにそれを見たが、私は間違っているかもしれません。
他のヒント
私は、静的メソッドのみが含まれている属性がありません、とから継承されていないUtil()
クラスを作成する傾向があります。基本的に、それは、ユーティリティ機能の束に、「名前空間」として機能します。私はこのクラスのサイズに成長することができますが、それらのメソッドは、特定の種類のデータとするか、関連するメソッドのグループがあるべきことは明らかである場合にのみ動作するように設計されていることは明らかである場合には、時折、自分のクラスにメソッドを分割しますおそらく、一緒にクラスに分類され、いくつかの属性ます。
私はそれがずれるが、よく組織され、それが難しく理解し、維持するために、ご使用のシステムの建築欠陥を作成していないことをコードする限り、純粋なOOPの実践から逸脱することは完全にOKだと思います。
私はいつも、標準のPHP関数の拡張としてのユーティリティ機能を考えます。あなたが実際にそれらOOを作るから任意の利益を得ることはありませんので、彼らはオブジェクト指向されていません。