2

新しいプログラムを作成中です。それは、私がこれまで何も作成したことがない方法で作成されています。プログラムは基本的に次の内容で構成されます。

  • Index.html - インターフェイス、HTML コードのみ
  • ActionController.js - index.html に含まれており、インターフェース要素への jquery フックを含み、Ajax 呼び出しを行い、インターフェースを更新します
  • ExampleAction.php - ActionController が Ajax を使用して呼び出す多くの「アクション」ファイルの 1 つ。ファイルに応じて多くのことを行いますが、ファイルのレイアウトは同じです。

このセットアップで私が抱えている問題は次のとおりです。

1. ajax を使用すると、すべての ExampleAction ファイルに新しいデータベース インスタンスを作成する必要があるため、データベース クラスのシングルトンを作成できませんでした。これは通常の動作ですか、それとも可能でしょうか?それはおそらく私のコードの何かですか? それが可能で、それが私のコードにある場合は、後で投稿します。

私が十分に明確でない場合、これは私が試したことです: - index.html の名前を index.php に変更しました (もちろん)。- このファイルの先頭にデータベース シングルトンを含めました。- ExampleAction.php への ajax 呼び出しを行いました。- ExampleAction.php にはデータベース クラスへのアクセス権がなく、再度インクルードして新しいインスタンスを作成する必要があります。

2. Ajax 呼び出しを行うとき、POST を介してパラメーターを送信します。ExampleAction の一般的なレイアウトは次のとおりです。

$actionInstance = new ExampleAction();
class ExampleAction {
 public __construct() {
  this.GetAction();
 }

 private GetAction() {
  $action = $_POST['action'];
  switch ($action) {
   case "Login":
    this.Login();
    break;
  }

  //Login function, etc. here

 }
}

もちろん、私の実際のコードにはサニタイズなどが含まれており、switch ステートメントはより長く、より多くの機能が含まれています。

これについて私が気に入らないことは2つあります。ファイルを呼び出すたびにオブジェクトをインスタンス化する必要があるのは好きではありませんが、仕方がないと思います。

2つ目は、機能が多いとスイッチが大きくなってしまうことです。

これらの問題はすべて、私がこれについてすべて間違っていると思わせています。

TL;DR: 私が作成しているようなプログラムをセットアップするための最良の方法を探しています。コードが遅くなり (ajax 呼び出しの量が増えているため)、1 分単位で維持するのが難しくなっているように感じます (switch ステートメントが増え続けるため)。

4

2 に答える 2

2

AJAX 呼び出しごとに新しいオブジェクトをインスタンス化する必要がある理由は、AJAX 呼び出しがクライアントからサーバーへの新しい要求であるためです。呼び出されたスクリプトはプログラム内で実行されていないため、スクリプトが AJAX によって呼び出された時点でセットアップを行う必要があります。

これを回避する最善の方法は、 codeigniterZend Frameworkなどの MVC を利用するフレームワークを使用することです。つまり、MVC フレームワークを正しく使用すると、AJAX 呼び出しごとにオブジェクトをインスタンス化する必要がなくなります。これは、コントローラーによって処理されるためです。各 AJAX 呼び出しは、一意の URI に対して行うことができるため、switch ステートメントを失う可能性があります。これらのさまざまな呼び出しをすべて処理する単一のコントローラー。

編集: コメントへ の返信 残念ながら、Zend Framework の経験はありませんが、前提は Codeigniter とほぼ同じであると確信しています。したがって、Codeigniter には、メイン コントローラーを拡張する AJAX コントローラーがあり、データベースやメイン コントローラー内でセットアップされているすべてのものにアクセスできます。

AJAX コントローラー内には、このようなさまざまな AJAX 呼び出しをすべて処理するさまざまなメソッドがあります。

//CI_Controller is codeigniter's base Controller
class AjaxController extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->output->set_content_type('application/json');
        // Can make calls to anything a normal controller can do
    }

    public function doSomething() {
        // You have access to the database because you are extending 
        // and calling the parent constructor
        // $this->db->query();
    }

    public function doSomethingElse() {
        ...
    }

これらの AJAX 関数を呼び出すには、URI はhttp://mysite.com/Ajax/doSomethigまたはhttp://mysite.com/Ajax/doSomethingElseになります。

前に指摘したように、AJAX 呼び出しは、クライアントからサーバーへのまったく新しい要求です。ユーザーがページをリクエストすると、PHP コードがサーバー上で実行され、出力がクライアントに送信されます。すべての JavaScript がユーザーのブラウザで実行されます。JavaScript が AJAX 呼び出しを行う場合、これはサーバーへの新しい要求であり、元の要求からの PHP が終了した後に発生します。

于 2013-05-08T09:38:33.347 に答える
1

プログラムの「最良の方法」を単純に提供するのはかなり困難です。

ただし、MVC パターンに飛び込んで、その構造について学ぶことをお勧めします。その後、独自のコードに同様のメソッドを実装することができます。

MVC についての基本的な説明は次のとおりですが、時間をかけてグーグルで検索し、次のテキストよりも多くのことを読んでください。

素人の言葉でMVCを定義する

あなたは技術に関心があり、コードに近いことを忘れないでください。あなたにとって MVC は当たり前のことですが、ビジネスに対して「モデル、ビュー、コントローラー」と言うと、何らかの形のトゥレット症候群に苦しんでいるという印象を彼らに与える可能性があります。コードに関連して MVC を定義した後でも、MVC はビジネスにとってあまり意味がありません。なぜこれが答えなのか、そして何よりもそれが何であるかをビジネスに理解してもらうことは、私の経験では予想以上に困難な作業になる可能性があります。仲間の開発者でさえ、これを理解するのが難しい場合があります。

リスナーに MVC とは何か、なぜそれが機能するのかを理解してもらうために、パスで試したことは、リスナーがより関与しているさまざまな業界に MVC を適用することです。不動産や車両と比較して、過去に私のために働いた例. ほとんどの人は、建築業者、大工、配管工、電気技師と取引したり、テレビで不動産番組の洪水を見たりしたことがあります。この経験は、MVC などの分離が機能する理由を説明するのに適したプラットフォームです。ソフトウェアの場合と同じではないので、おそらくそれはうまくいかないと思っていることは承知していますが、ビジネスを開発者になるように訓練したり、MVC を深く理解したりするためにビジネスを訓練しようとしているわけではないことを覚えておいてください。本番環境では必要であり、それが MVC 構造が提供するものです。

これをどのように説明できるかの例を示すために、財産の分離がどのように機能するかを非常に簡単に説明しました. これは、開発されていないシステムの使用に焦点を当てていることに注意してください。これは、まったく異なる角度の説明になる可能性があります。

意見

MVC のビューはプレゼンテーション層です。これは、製品のエンド ユーザーが見て対話するものです。システムは、コマンド ライン出力からレンダリングされた HTML まで、さまざまな種類の複数のビューを持つことができます。ビューは、ほとんどの明確な設計ではビジネス ロジックで構成されていません。インターフェイスは目的に適しており、対話の領域です。したがって、消費者がやり取りする HTML を単純に出力したり、企業がやり取りする SOAP/XML を出力したりすることができます。どちらも、システムの背後でモデルとコントローラーとして知られる同じビジネス ロジックを使用します。

プロパティの世界では、ビューをプロパティの内部または居住者が相互作用するプロパティの外側の層と考えることができます。インテリアは目的に合わせてカスタマイズでき、同じ物件にさまざまなタイプのテナントを持つことができます。たとえば、特定の設計のプロパティには住宅が含まれる場合があります。同じ内部空間をオフィススペースとして簡単に使用できますが、同じプロパティ内で別の目的があります。ただし、プロパティ構造は同じです。したがって、ユーザーが対話する環境は、建物の構造に干渉しません。

コントローラー

コントローラーは魔法が起こる場所であり、ビジネス アプリケーションのロジックを定義します。これは、ユーザーがビューから応答を送信した場所である可能性があり、この応答は、要求の内部動作を処理するために使用され、ユーザーへの応答を処理します。ユーザーが書籍の購入をリクエストした場合の典型的な応答を取得します。コントローラーには、ユーザー ID、支払いの詳細、配送先住所、および商品の選択肢があります。これらの要素は、ビジネス ロジックを通じて処理され、購入が完了します。データはシステムを介してモデル層に渡され、最終的にリクエスト全体がビジネス定義を満たした後、注文が作成され、ユーザーはアイテムを受け取ります。

これを物件に例えると、オンラインで本を注文することは、電気のスイッチをオンにすることに例えることができます。本を注文するのと同じように、テナントはスイッチをオンにフリックします。スイッチ自体は、Web サイトのチェックアウト ボタンをクリックするのと同じように、コントローラーに要求を送信するビュー レイヤー内の要素です。この場合のビジネス ロジックは、電気技師がインストールし、プロパティの設計に組み込まれているものです。スイッチをフリックすると、回路が完成します。電気は、ヒューズ ボックスを含むすべてのワイヤを通り、電球までまっすぐに流れます。ユーザーが本を受け取るように、この場合、テナントは光を受け取ります。電気配線を含む舞台裏のプロセス全体は、テナントには見えません。

モデル

MVC のモデルは最下層にあり、システムのコア ロジックを処理します。ほとんどの場合、これはデータ ソースと対話するレイヤーと見なすことができます。MVC を使用するシステムでは、コントローラーはデータを保存および取得するためにモデルに情報を渡します。上記のコントローラ定義の例に続いて、ここに注文の詳細が保存されます。在庫レベル、本の製品の物理的な場所などの追加データはすべてここに保存されます。それが注文された在庫のある最後の本であった場合、このアイテムの次のリクエストで、そのアイテムが入手可能かどうかが確認され、アイテムが入手できなくなったため注文が拒否される場合があります。

電灯のスイッチをオンにする例を除いて、私たちの構造のこのレベルは電力供給である可能性があります。テナントがスイッチをフリックすると、内部回路は要求に電力を供給するために電力を要求する必要があります。これは、要求を処理するためにデータが必要な場合と同様に、ユーザーがデータベースからデータを要求した場合と同様です。住居が電源に接続されていない場合、プロセスを完了できません。MVC を使用することによるビジネス上の利点

MVC とは何かを説明するメッセージを理解したら、MVC からどのような利点が得られるかを確認する必要があります。ここではあまり詳しく説明しませんが、実際の状況に直接関係する特典をより正確に適用できると確信しています。MVC ベースのシステムの一般的な利点のいくつかをここにリストすると、いくつかの例が表示されます。

スキル レベルが異なれば、システム レベルも異なります。たとえば、設計者は開発に関する知識がほとんどなくてもインターフェイス (View) を操作でき、開発者は設計レベルをほとんど気にせずにビジネス ロジック (Controller) を操作できます。その後、それらは完了時に単純に統合されます。上記の分離プロジェクトの結果として、より簡単かつ迅速に管理できます。設計者は開発者より先にインターフェイスを開始でき、その逆も可能です。この開発プロセスは、逐次的ではなく並行的に行うことができるため、開発時間を短縮できます。同じビジネス ロジックを使用して、複数のビュー タイプを簡単に作成できます。システムを通過するルートをクリアします。システムのさまざまなレベルがどこにあるかが明確にわかります。システムのルートが明確になることで、ロジックの共有と改善が可能になります。これにより、データからユーザーへの許可されたルートが明確にわかり、ルートに沿って明確なセキュリティ チェックを行うことができるため、セキュリティ上の利点が追加されました。各層はそれ自体に責任があります。(ポイント 1 に関連) これは、多数の重複ロジックが存在する可能性のある密結合システムよりもはるかに簡単かつ迅速に維持および管理できるクリーンなファイル構造を持つことができることを意味します。明確な構造を持つことは、開発がより透明になることを意味し、適切に適用された場合、開発時間、メンテナンスの問題、およびリリース サイクルの短縮につながるはずです。(ポイント 1 に関連) これは、多数の重複ロジックが存在する可能性のある密結合システムよりもはるかに簡単かつ迅速に維持および管理できるクリーンなファイル構造を持つことができることを意味します。明確な構造を持つことは、開発がより透明になることを意味し、適切に適用された場合、開発時間、メンテナンスの問題、およびリリース サイクルの短縮につながるはずです。(ポイント 1 に関連) これは、多数の重複ロジックが存在する可能性のある密結合システムよりもはるかに簡単かつ迅速に維持および管理できるクリーンなファイル構造を持つことができることを意味します。明確な構造を持つことは、開発がより透明になることを意味し、適切に適用された場合、開発時間、メンテナンスの問題、およびリリース サイクルの短縮につながるはずです。

PHP で MVC を実装する方法に関する具体的な PHP の例は、http: //phpmaster.com/the-mvc-pattern-and-php-1/にあります。

さらに、コントローラーはある時点で「ビュー」を表示することを理解してください。このビューは、html、xml、json、または何でもかまいません。したがって、コントローラーは AJAX リクエストも処理します。

于 2013-05-08T09:31:50.017 に答える