2012-10-12 30 views
6

最近、私の以前の質問では、Webアプリケーションを設計した方法が理想的ではないことが強調されました。コードの設計と構造

以下を考慮してください。私はプロファイルやフォーラム、チケットをサポートするなど、さまざまなセクションがあるマルチユーザのWebサイトに取り組んでいます。構造は次のとおりです:

が含まれているメインページまたは* required_once * home.phpと呼ばれます。 home.php

、ロードされた最初のものの一つは、router.phpあり、これにより、ユーザはおそらく作り出すことができることを一つ一つの$ _GETと$ _POSTを処理し、すべてのフォームとプロセスを経てソートされています$ data_processというメイン変数。 Router.phpは本質的にちょうど1つの巨人switch() $ data_processのステートメントです。これにより、すべてのデータが解析され、結果が得られます。

次に含まれているのはheader.phpです。これは、読み込まれるページに必要な変数を処理するだけでなく、ヘッダーを設定し、そこに表示される内容を正確に決定します。メニュー、ユーザー情報、現在表示されているページに関する情報(ホーム>サポート>チケットの表示)などがあります。

次に、ページは$ page変数に従ってロードされます。シンプルなインクルード。

次にfooter.phpを閉じてから閉じます。

ダイナミックウェブサイトが作成されます。私はこれが@HorusKolという名前のユーザーによる悪い習慣であると言われました。私は今まで使ってきたウェブサイトを作成するのに最も合理的で簡単なので、このウェブサイトに非常に満足しています。これはまだ悪いコードの設計ですか?完璧なコードデザインとは何ですか?

PS - PHP、MySQL、そして私のための構造を説明してくれる誰かが簡単に読むことができますか?

+0

+1正直な質問です。 home.phpがリクエストの出発点であれば、MVCアーキテクチャ(少なくとも出発点)を得ています。おめでとう! (そして完璧なコードデザイン=触れられていない理論) – Teson

+0

ありがとう!私はMVCアーキテクチャを調べます。 – Chud37

+0

あなたの 'ヘッダー'はたくさんの仕事をしています....将来的にいくつかの変更が必要な場合、将来的には維持するのが難しいでしょう。 – itachi

答えて

1
  • プロセスの残りの部分で必要でない可能性のあるデータを大量に処理するため、設計が不適切です。ルータはURLのみを処理する必要があります。ポストデータの処理は別の場所で処理されます。すべてが物事を遅くするなど、必要なものだけを含める。
  • もっと良い方法は、さまざまな部分でアプリをより構造化することです。 URLを処理しているルータ、ルーティングされたリクエストに基づいてアクションを実行するコントローラ、すべてのhtmlとページを処理するビュー、データにアクセスするモデル。 MVCは何を思いついています。
  • 完璧なコードデザインはありません。
+0

しかし、確かに巨大な 'switch'ステートメントは、処理する必要があるものだけを処理しますか? – Chud37

+0

あなたが 'http:// mysite.com/controller/action'のようなURLを処理すると、巨大なスイッチは必要ありません。コントローラークラスからurlを取得し、コントローラーにアクションを処理させます。 – JvdBerg

+0

非常に興味深い.. – Chud37

1

"良いデザイン"の正式な定義はありません - あなたの設計が最適な方法でプロジェクトのさまざまな力をバランスさせることが期待できます。あなたのプロジェクトの力は、保守性、パフォーマンス、スケーラビリティ、拡張性 - 古典的な非機能要件 - だけでなく、検索エンジンの最適化、標準準拠とアクセシビリティ(特にWebプロジェクトに適用されるもの)。

すべてのURLの形式が「www.mysite.com/home.php?action=getDetails & productID = 123」の場合、検索エンジンの使いやすさはかなり低くなります。意味URLを持つ方がずっと良いです - "www.mysite.com/products/DesktopPc/details.php"あなたは現在のデザインで巧妙な.htaccessのトリッキーを使ってこれを達成することができます。

保守性の観点から、設計にはいくつかの問題があります。私が正しく理解していれば、サイトに新しいページを追加するには、router.php(あなたの巨大なswitch文)、ページ自体、おそらくheader.phpなど、いくつかの異なるソースファイルのコードを修正する必要があります。これは、コードが厳密にcoupledであることを示しています。巨大なswitch文を修正することは、面白いバグの原因と思われます。また、ルータとヘッダの組み合わせ、変数の操作、実際のページ自体は少し壊れやすいようです。これは、あなたがプロジェクトに取り組んでいる唯一の人であり、あなたが長期間暮らしているなら大丈夫です。そうでない場合は、既製のフレームワーク(MVCは現在のお気に入りです; Zend、Symphony、CakeはPHPでこれをうまく利用しています)を使用する方が良いでしょう。新しい開発者をドキュメントで指摘し、最高速度。

保守性の最大の敵の1つは、複雑さです。複雑なコードは扱いが難しく、バグが多くなります。複雑さのためにformal metricがあります。私はあなたのswitch文がそのメトリックで非常に高く評価されていることを確信しています - それ自体は必ずしも大きな問題ではありませんが、確かに目を引くものです。多くのMVCフレームワークでは、ルーティングをコードではなくデータとして定義する(つまり、設定ファイル内にルートを設定する)、あるいは設定を上書きする(つまり、リクエストがページ "productDetails"の場合は、 "/inc/productDetails.inc")。

拡張性は別の問題かもしれません。あなたのサイトのコンテンツをJSONまたはXML、HTMLとして公開する必要があると想像してください。現在のデザインでは、ページ処理パイプラインのすべてのアイテムが気にして、知る必要があるため、多くの変更が必要になります。 home.phpはHTMLを送信しないこと、ヘッダーとフッターを知る必要があること、ルータが追加のデータ型を処理する方法を理解する必要があることを知る必要があり、スイッチのステートメントをさらに大きくします。これはもう大したことではないかもしれません。

拡張性と保守性は、コードを単体テストできることによって助けられます。テスト駆動開発は、これを全体的なルーチンに変えます。あなたのアプリケーションのテストは難しいと思っていますが、それは単なる推測です。それはあなたが上で説明したものよりも個々のコードの塊をどのように因数分解したかによります。しかし、MVCのもう1つの利点は、システムの主要部分の単体テストを簡単に記述できることです。

あなたのプロジェクトの力が保守性や拡張性に重点を置いておらず、あなたがSEOの面を扱うことができれば、あなたのデザインは必ず「悪い」とは思われません。たとえあなたがそれらのことを気にかけていたとしても、その力に対応するためにできることは他にもあります。文書を書いて、安価なコーダーをたくさん雇ってください。

これらのデザイントピックでスピードアップする最善の方法は、PHPまたはMySQLに関する書籍ではありません。私はGamma et al。の "Design Patterns"というMartin Fowlerの "Refactoring"と "エンタープライズアプリケーションアーキテクチャのパターン"をお勧めします。そしてMcConnellのコード・コンプリート(これは今のところ古くなっている)です。

関連する問題