3

PHPインベントリプログラムが提供されました。次に、デザインパターンがプログラムをより良くするのか、それともプログラムをより複雑にするだけなのかを言うことになっています.

プログラムはこのような構成になっています。

プログラムは、html に埋め込まれた php スクリプトに分割されます。(A) 1 つのオプション専用の 1 つの完全な php ページがあるか、(B) オプションのロジックが、同様のアクションの他のオプションを提供する別のスクリプト ページ内にあります。(「リセット」や「ホームに戻る」などの簡易ボタンは除きます。)

(A) たとえば、Web サイトを開くと、オプションを含むナビゲーション メニューが表示されます。オプションをクリックすると、たとえば顧客の下に「表示」リンクがあります。クリックすると、「編集」や「削除」など、より多くのオプションに対応する他のリンクを含む別のページに移動します。通常、この Web サイトでは、各オプションが独自の php スクリプト ページに対応しています。たとえば、「View」は list_customers.php に対応します。「編集」は、edit_customer.php に対応します。

(B) もう 1 つの可能性は、そのオプションのロジックが「一般化された」スクリプト ページにあることです。つまり、複数のオプションのロジックが 1 つのページにまとめられているということです。その一例が「削除」です。顧客、ジョブ オーダー、または見積もりを削除する前に、auth.php という名前の php スクリプト ページに移動して、管理者だけが削除できるようにします。ログインしているのが管理者かどうかを確認し、顧客、ジョブ オーダー、または見積もりを削除するためのロジックも auth.php にあります。もう 1 つの例は、顧客のすべての「検索」オプションです。独自のページ search_customer.php がありますが、実際に検索するためのロジックは実際には list_customers.php にあります。このパターンは、顧客の検索、見積もり、または配信レポートの検索を含むすべての検索に適用されます。検索コードは実際には対応する list_* にあります。

より複雑にならないデザインパターンを見つけるのに苦労しています。私が見つけたもののほとんどは OO パラダイムを対象としていますが、このインベントリは確かにそうではありません。私が見つけた唯一の便利な方法は、ログイン(ユーザー名とパスワード)が(ユーザー名、パスワード、ID番号)のようなものに変更された場合であるため、Factoryパターンは確かに役に立ちません。ただし、ログイン機能を持つ php ページは 2 つしかないため、これは役に立たないと思いました。

また、すべての検索ロジックを 1 つのオブジェクトにできるかどうかも調べました。ただし、検索の各タイプには独自のメソッドが必要であり (差分テーブルを照会しているため)、現在の設定と大きく異なることはありません (各検索は現在、対応するリストの php ページにあります)。

役に立つかもしれないと私が見つけた唯一のものは、正規表現の設計パターンです。プログラムのフォームは検証されません。ここに何かアイデアはありますか?

さらに、クラスのトピックはソフトウェア品質です。私の個人的な意見では、このウェブサイトはそれほど大きなプロジェクトではないため、デザイン パターンによってこのウェブサイトはより複雑になります。しかし、私のクラスメートは、これは OO ではないため、保守性が低いと主張しています。しかし、私は思っていました、PHP は OO ではないものとして作成されましたが、正しいですか? したがって、OO 設計パターンに強制的に準拠させると、混乱するだけです。

どう思いますか?この状況に適用できる設計パターンはありますか?

4

3 に答える 3

4

次に、デザインパターンがプログラムをより良くするのか、それともプログラムをより複雑にするだけなのかを言うことになっています.

デザイン パターンは、一般的な問題に対する一般的なソリューションです。デザイン パターンを使用するためにデザイン パターンを使用しないでください。それらを使用して、特定の問題を解決します。最も顕著なデザイン パターンは、GOFPOEAAのものです。ストラテジーのように簡単に実装できるものもあれば、アーキテクチャについてもう少し考える必要があるものもあります。

たとえば、アクション スクリプトは、私にはTransactionScriptのように聞こえます。はい、これらをPageControllerにして、スクリプト内のボイラープレート コードを減らすことができます。そして、FrontControllerを追加して、PageControllers のボイラープレートを減らすことができます。そんなときは、ビジネス ロジックと UI を MVC で分離してみませんか?

一般に、特にGRASPSOLID、およびDRYの実装を維持する場合、デザイン パターンは長期的にはコードをより保守しやすくします。パターンは明確に定義された用語であるため、デザイン パターンを使用すると、コードが理解しやすくなり、話しやすくなります。開発者に、このコードは Factory であり、開発者は理解してくれると伝えてください。

しかし、はい、デザイン パターンはコードをより複雑にする可能性もあり、オーバーエンジニアリングを防ぐためにどこで停止するかを知っておく必要があります。使用しないというわけではありませんが、特定の問題を解決できる場合は合理的に使用してください。また、一般的なAntiPatternsについて学習することも検討してください。

このクラスはソフトウェアの品質に関するものであるため、ソフトウェアの品質はコード内のデザイン パターンの数では測定されないことに注意してください。ソフトウェアの品質は多くの指標で測定され、それらを測定するためのツールがあります。アイデアを得るには、PHP プロジェクトの品質保証をご覧ください。

補足として、デザイン パターンは必ずしも OOP で使用する必要はありません。OOP はコードを整理する優れた方法であり、多くのデザイン パターンは実際に OOP を対象としていますが、OOP に限定されません。MVC は手続き型コードで使用できます。匿名関数で Strategy と Factory を使用できます。FrontController は単純な switch/case ステートメントにすることができます。これは、デザイン パターンがアーキテクチャの青写真であり、ほとんどの場合、言語やパラダイムにとらわれないためです。

于 2010-11-15T08:58:14.283 に答える
0

OO はすばらしい方法です。コードをより保守しやすくします。それは本当にプログラミングの未来であり、php は OO に最適な言語です。

于 2010-11-15T07:20:01.317 に答える
0

PHP 5+ は完全に OO です。また、たとえそれが 1 ページのスクリプトであっても、オブジェクト指向の方法でほとんどすべてを実行するようにしてください。ここでの論理的根拠は、この 1 つのページが成長するか、別のページで使用される可能性が非常に高いということです。

そして、それをよく理解せずにデザイン パターンを適用しようとしないでください。デザイン パターンに関するこの SO の質問を参照してください。

于 2010-11-15T08:54:09.433 に答える