PHP Webアプリケーションのアーキテクチャ/設計[終了]


20

PHPでWebアプリケーションを開発する新しい仕事に真っ先に投げ込まれました。私は決してPHPの初心者ではありませんが、以前に大規模なアプリケーションを開発したことはありません。将来の問題に備えて自分自身をセットアップすることを避けるために、開発をどのように構成するのか疑問に思っています。機能とパフォーマンスの観点から時間をかけてスケーリングできるように、アプリケーションを適切な方法で設計および設計するにはどうすればよいですか。私は次のようなことを考えています:

  • バックエンドとフロントエンドの分離
  • ディレクトリ構造

持続可能な方法で大規模なPHP Webアプリケーション開発にアプローチできるようにする、アーキテクチャおよびアプリケーションの設計パターン、フレームワーク、およびメソッドへのポインターをいただければ幸いです。


こんにちは!Webアプリケーションの最も一般的なアーキテクチャは、PHPおよびその他すべての一般的なWebプラットフォーム用のMVCです。とはいえ、よくある質問をご覧ください。ソフトウェアアーキテクチャは話題になっていますが、質問をもう少し具体的に修正する必要があります。「一般的なアーキテクチャに関する健全な議論」は、サイトのQ&A形式に適合しません。
ヤニス

私はS / Eサイトを頻繁に訪問しますが、この質問には誰も答えないだろうと感じていたため、「議論」のコメントです。MVCポインターに感謝します:)
ブラッドモリス

回答:


29

私が携わった最新の大規模プロジェクトのアーキテクチャの概略図。

ここに画像の説明を入力してください

これは、実際のアーキテクチャのドキュメントから調整され、典型的なMVCアプローチと組み合わされた典型的なn層アプローチに似た方法で提示された、基本的な概要にすぎません。ご覧のとおり、ロジック層とデータ層はサービス層、より具体的にはあまり知られていないPHPフレームワークであるRecessに触発されたREST APIを介して接続されています。

車輪を再発明しないでください

私は3つのフレームワークを使用しています。

  • Zend Framework

    驚くほどよく書かれたコードベースと豊富な機能リストを備えた巨大なPHPフレームワーク。大規模なアプリケーションでは、フレームワークを頻繁に微調整することに気付くでしょう。私はZFのコードベースを使用するのが最も楽しいと感じています。ただし、エントリレベルのフレームワークではないことに注意してください。

  • 小花

    KohanaはCodeIgniterのフォークとして始まりましたが、最初はそれを使用しないのに十分な理由でした。今日では、階層型MVCアプローチに従うことで、他のすべてと差別化する堅実でエレガントなフレームワークに成長しています。HMVCでは、MVCよりもモジュール化を大幅に拡張できます。図のプロジェクトについては、KohanaのHMVCをZFに適合させましたが、小規模なプロジェクトにはKohanaを使用し始め、より大きなプロジェクトにも使用を検討しました。

  • CodeIgniter

    継承したレガシープロジェクトのためにのみ使用します。可能な限り避けてください。

他の回答が指摘したように、ORMは常に便利です。私はDoctrineを広範に使用していますが、CouchDBMongoDB用の真新しいマッパーご覧ください。大規模アプリケーションではスケーラビリティが不可欠であり、NoSQLソリューションを評価する必要があります。

ただし、覚えておくべき重要なことは、大規模なアプリケーションには通常、独自の課題があることです。あなたがそこにあるすべての人気のあるサードパーティのソリューションを評価する必要があり、おそらくいくつかのあいまいなものから多くを得るでしょう。Recessを最初に評価したとき、それは生産準備が整っていませんでしたが、そのアプローチは本質的にプロジェクトに取り入れました。

性能

一般的なWebサイトでは、単純な出力キャッシュオペコードキャッシュを使用して回避できますが、大規模なアプリケーションでは、最も一般的にはmemcachedを中心に構築されるメモリキャッシュを検討する必要があります。

xdebugは、ほとんどがデバッガーとして知られていますが、プロファイラーとしても機能します。私は最近Zend Serverの使用を開始しましたが、そのコードトレース機能非常に気に入っています。残念ながら、これらはCommunity Editionでは使用できませんが、xdebugはかなり適切な代替手段です。

Apacheを使用している場合は、Apacheを最適化してくださいnginxlighttpd明らかにパフォーマンスの点でより良い選択肢ですが、私はそれらをあまり使用しておらず、本当に言うことはできません。

データベースに関しては、Doctrineのクエリと結果のキャッシュは、特にmemcachedと組み合わせて驚くほど機能します。そしてもちろん、フロントエンドを忘れることはできません。Yahooの優れたパフォーマンスチームは、ベストプラクティスの広範なリストを作成しました。私は実際にはフロントエンドの開発者ではありませんが、ソロプロジェクトで素晴らしい結果を見てきました。

最後に、PHPには新しいガーベッジコレクションメカニズムがあり、検討する価値があります。

セキュリティ

控えめに言っても、PHPセキュリティの世界は混chaとしています。私は専門家ではないので、以下を一般的なヒントとして扱います。

  • オープンWebアプリケーションセキュリティプロジェクト

    そこにはたくさんの良いものがありますが、簡単な概要を見るにはトップ10リストから始めてください。また、これらの一般的な脆弱性に対するPHPソリューションを調査します。

  • スタックの脆弱性

    良い習慣は、PHPの未解決のバグを定期的に監視することです。あなた自身が専門家でなくても、ほとんどの場合、セキュリティの脅威に関する回避策のヒントがあります。そしてもちろん、スタックの他のすべての部分、特にWebサーバーやデータベースなどの最も脆弱な部分に習慣を拡張する必要があります。

IT Security Stack Exchangeの群衆は、より知識のある回答を提供します。

参考文献


1
素晴らしい答え; 素晴らしいプレゼンテーション。素晴らしいレイアウト...素晴らしい仕事です!
動的

@Jaeありがとう!全部読みましたか?:Pそれは少し長いです、私はそれを少し剪定するべきかどうか疑問に思っていました。
ヤニス

ハ、やってみた!;-)
動的

ヤニス、質問があります。私は最近、PHPに非常に興味を持ちました。私は自分でそれを学ぼうとしていましたが、少し問題があります。あなた自身もPHPが得意だと思われます:-)。少しガイダンスを共有してもらえますか?その場合は、チャットルームを作成します。
動的

それはまさに私が探していた種類の答えです!たくさんの情報を取得するのは大変なことです。次の1時間で吸収といじくり回しをする必要があると思いますが、開始する場所を教えてくれました。ありがとう:)
ブラッドモリス

1

IBMのdeveloperworks Webサイトには、PHPの記事が山ほどあり、その多くは非常に優れています。PHP Webフレームワークを比較し一連の記事とCakePHPフレームワークを使用したWebサイトに関する別のシリーズがあります。

O'Reillyの古い「Onlamp」ウェブサイトには、PHPのMVCに関する記事があります。その記事の著者は、MVCについてある程度詳しく説明しました

O'Reillyの記事は少し古いですが、それらはあなたを元気づけます。IBM developerworksのものは本当に優れており、あなたが求めているものの多くをカバーしています。


1

私は数年前からPHPに取り組んでいます。私はこの質問が何らかの形で開かれていることをYannisに同意しますが、私はあなたにいくつかの指針を与えると思います。まず、Yannisが言ったように、MVCを検討する必要があります。そうするために、推奨できる2つのフレームワークはCodeIgniterSymfonyです。最初のものは軽量であり、非常に簡単に開始できますが、素敵なセットアップを機能させるために、いくつかの追加のカスタマイズを追加する必要がある場合があります。SymfonyはFabien Potencierによって開始されたプロジェクトであり、ソフトウェアエンジニアリングで多くのデザインパターンを使用していますが、学習曲線CodeIgniterの場合よりもはるかに急です。

次に、データベース接続を検討する必要があります。これにより、PHPの2つの最も顕著なORMフレームワークであるDoctrinePropelを紹介します。個人的にはPropelが大好きで、CodeIgniterベースのアプリにPropelのクリーンインストールをセットアップする方法について書いていますが、SymfonyはDoctrineの方が好きですが、どちらかを使用しましょう。あなたは教義と上のいくつかの詳細をチェックアウトしたい場合はPropelを、に見て、この質問、私はいくつかの時間前に尋ねました。

最後に、SmartyDwooTwiggなどのテンプレートフレームワークを検討する必要があります。Smartyは最も古く、したがって最も安定しています。Dwooの 継承からSmartyのとPHP 5に、より良いOOPをサポートするために、一つや二つ追加されますが最後にTwiggは、テンプレートの選択肢が用意されsymfonyのチームを、私はそれを自分自身を見ていないが、それはから来ている場合はsymfonyのチーム それは素敵でなければなりません

このスピーチ全体が意味を成すことを願っています、デビッド

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.