質問

私は特定の質問を使えるような一般的な答...がマルチフPHPは、すべてのビジネスロジック層で何層にな作---えー思ビルのアプリケーションに対する表示ユーザー情報のデータベース)を発表。どちらを使うべき事業を層するだけでなく、データのプレゼンテーション層、情報を取得しデータベースから直接に発表。あのプレゼンテーション層を使用するだけで、データにアクセス用メソッド層を用いるだけでデータを取得し、すべての作業を行うことにな事業層?

また、話の異なる層で最高いprocedurally、OOPなどを含むをテンプレートvsクラスを利用して、テンプレートは、検証データprocedurally vsクラスを利用して、機能vsクラスのデータからのデータベースなど。)

ご覧の通り、私のようなものの仕組みや、物を置いたりしないでください。れた場合、アドバイスや一般のヒントを...てください。

感謝

役に立ちましたか?

解決

WebアプリケーションとN階層N階層の概念は、JSONやAJAX、またはFlashとXMLRPCの普及と拡大している主な理由は、興味深いものです。よくこれを発現千鳥青い線を表示する Webopediaにこのチャート。要約すると:あなたのビジネス、アクセサ、およびプレゼンテーションロジックだけではなく、サーバー上に存在する可能性が - しかし、いくつかのケースでは、右のブラウザインチN階層の意図は、しかし、の分離のです。あなたのUIやデータベースを変更、またはその他のUIを追加する必要がある場合、あなたはあなたのビジネスロジックに影響を与えるべきではありません。そして、これはあなたのAPIを決定するであろうものである - 。あなたのHTMLとCSSは、Flexのために破棄され、およびMySQLがOracleのために変更された日を予測

これは決定要件である、と私が使用したいくつかのWebアプリケーションでは、N階層の変動が同時に使用されています。例LyrisHQ(電子メールASP)を見てみましょう。彼らは、顧客のWebアプリケーションがあります。最近、彼らはFlashベースのアプリケーションをプッシュ見つめてきました。これは明らかに右のブラウザに大量のデータを出荷している、とFlash UIで重複ビジネスロジックのビットは、おそらくそこにあります。どちらか一方が異なる(重複)の要件のために必要であるので、彼らは、しかし、両方のアプリケーションを維持する必要があります。

最も一般的なPHPアプリケーションがブラウザに多くのフォーマットされていないデータを出荷考慮されていません。あなたがいた場合でも、これは非常に迅速に、あなたのAPIを設計したいと思うかを知らせます。可能性が非常に高い、あなたはXMLRPC、REST、またはSOAPを話すことができた...あなたのPHPのプレゼンテーションテンプレートを使用する同様の内部コントローラクラスに加えて、コントローラを望みます。これは厳密には、あなたがLoginControllerクラスに話を聞いたログインフォームのためのPHPテンプレートを持つことになり、シンプルなWebログインページのために意味するだろう。 XMLインタフェースも同様に同じLoginControllerクラスを使用します。あなたはAjaxリクエストにSQLを記述するために狂気になることを前提とするのと同じように...あなたは、厳密には、あなたのプレゼンテーションテンプレートに書き込むクエリを回避されるだろう。

多くの場合、データベースのバックエンドのブランドを切り替える必要が決してありませんので、

ビジネス層は、多かれ少なかれ厳しいことができます。厳格なN階層の設計では、あなたのビジネスオブジェクトを使用すると、ビジネス層を書き換えることなく、MS SQLへのMySQLから切り替えることができているかのようになり、あなたのデータベースに話すだろうか。時々、これは、各表(表ゲートウェイ)、各行(アクティブレコード)、各参加、またはトランザクションごとにオブジェクトをモデル化することによって行われます。 PDOまたはPHP-ADOのようなものが、完全な単離に有用が、不足しているところです。 HibernateのようなJavaでORM /永続層は、多くの場合、オブジェクトクエリ言語(OQL)を提供することで、アイソレーションのこの種をよりよく発揮ます。

私自身、私は現在、MS-SQL 1へのMySQLベースのPHPアプリケーション各地からバックエンドの移行を行っています。アプリケーションは今まで直接SQLクエリを使用しています。クラスで一連のクエリを取る方法を選択し、どちらかそれらを抽象化する、またはサブクラス化、そして、できれば、ビジネス・ロジックを変更しない想像してみてください。非常に少なくとも、あなたはすべてのあなたのSQLは、間接的な呼び出しを行うことになるでしょう。 (PHP ORM の上 S.O.ポスト。)

そして最後に、OOPについてのあなたの質問に:どのようにあなたがしなければならない要件を満たすためにそれを使用。数分は、ボールが転がり得るためにかなりすぐに私はクラスとテンプレートにそのリファクタリングますため私の個人的な技術は、右PHPのプレゼンテーションテンプレートにロジックを開始することです。私は一般的なアイデアを持っている場合、私はDNRY原則を維持するために努力し、共有クラスにルーチンを抜け出します。 (ように、ここに投稿してください。のOOPは基本的な要件ではありませんN層設計のために。DNRYはカントー、保守性、あなたのコードを維持するために非常に重要です。うち10締め切りとスコープシフトは、APIを破壊します。あなたが続けるために必要なものを手に入れるまでそれをリファクタリング。私はOOPがあなたを得るのを助ける賭けます。

他のヒント

私はかつて、大きなモデルは、(ビジネス層)の大きなコントローラ(アクセサ層)よりも優先されるべきであると言って何かを読みます。

また:それは本当にプロジェクトに依存します。

...私の目には、それは常に、(おそらく誰もがここに同意する)すべてのためにOOPを使用しても意味がありません。特に、PHPなどのスクリプト言語で、多くの場合、単に機能としてバリデータを行うには簡単です

私は間違いなく、その目的を台無しにしてしまうこと、プレゼンテーション層でのデータベース呼び出しを持っていないあなたをアドバイスします。

があり多層アーキテクチャのに異なるアプローチがあり、彼らは別の提案を持っています。

私が一緒に働いてきたZend Frameworkには、フォーム脂肪モデル/細いコントローラ変異体の通常ます。

この中で(比較ではかなり良いようにPHPフレームワークを選択する上で、この記事ノートを見つけた場合はZend Frameworkのにケース)CakePHPの。

私のopionionの最大の違いは、Zend Frameworkのコンフィギュレーション・フォーカスとは非常に異なっているのCakePHPで撮影された規則・オーバー・コンフィギュレーションアプローチです。

多層アーキテクチャを実装する場合は多くの意味を作るフレームワークを使用することにより、あなたは道に強制されているか、少なくとも、悪いことではありませんOOPを使用してに押し込まれます。

もちろん、実装純粋な機能の呼び出しで3層アーキテクチャを言うが、それは私の経験に基づいて、そのうまくスケールしませんでした。

ウェブサイト実際のでティアが通信途中でかなり異なっているMVCパターンの場合は、良い選択です。

「正常」3層アーチとMVCパターンとの間の差は、ビュー、コントローラとプレゼンテーション層のみが3層の論理層へのアクセス権を持つようにモデル層の両方へのアクセスを有することですアーチます。

私の世界はこのようになります:

  アクセサを提供するために、MODEL1 -

DB1 <   機能、データの整合性、ビジネス   このデータセットのDB2 <ためのルール - モデル2   アクセサ関数を提供するために、データ   このため整合性、ビジネスルール   データセット

     

コントローラ:へのコントロール・データ・フロー   ビュー、フィルタ/からのデータを編成   景色。以下のためのビジネスルールを実装   与えられたのアプリケーションの。知っています    のモデル間のビジネスルールます。

     

再生回数:テンプレート以外の何物でも   によって提供される表示データ   コントローラ。にすべてのデータを渡します   コントローラ。の知識を持ちません   MODEL1またはモデル2や事業   それらを支配するロジックます。

私のおすすめている研究デザインパターンとしてこの作品のよう!多くのPHP固有の書籍をカバーすることのセキュリティーソフトのものからAPressはどの"聖書"のデザインパターン: "デザインパターン:要素の再利用可能なオブジェクト指向ソフトウェア"

のは、 Doctrine2 を、より安定したバージョンを待ちましょう。

これは、永続性の無知なドメインオブジェクトの哲学で開発されています。このフレームワークの助けを借りて、マルチティアアプリケーションを開発するためにはるかに容易になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top