1. 現在のフレームワークの問題点は何ですか?
現在主流のフレームワーク、Zend Framework、Cakephp などはすべて MVC モデルを採用し、URL ルーティング分散を実装しています。たとえば、http://www.xxx.com/user/login は userController オブジェクトの loginAction メソッドにマップされ、http://www.xxx.com/user/register は userController オブジェクトの registerAction メソッドに対応します。 userController オブジェクト。対応する userController オブジェクトは次のようになります。
}
?>
それで、どんな問題があるのですか?明らかに、不要なコードが含まれています。たとえば、/user/login にアクセスする場合、registerAction() メソッドにコンテンツを含める必要はありません。上記のコードは単純な例にすぎません。一般的に、コントローラーは小さな機能モジュールに相当し、特に大規模なプロジェクトでは、より多くの機能操作が行われます。このように、コントローラーに 12 を超えるメソッドがある場合、各リクエストには多くの冗長コードが含まれることになります。 PHP のパフォーマンスを向上させる上で非常に重要な点は、無関係なコードを含めないようにすることです。
最近の小規模プロジェクトでは、独自の phpbean フレームワーク (フレームワークは Zend フレームワークに似ています) を使用しましたが、その後の開発中に、実際に各コントローラーに含まれているアクションが多すぎることがわかり、後でオフロードを検討する必要がありました。しかし、理想とは程遠い。プロジェクトアドレス: http://www.songjin.net:8080。
2. 問題はオブジェクト指向のエラーによるものではありません
多くの人は「冗長なコードが含まれることはオブジェクト指向のエラーである」と考えていますが、私はそう思いません。前回の記事で述べたように、オブジェクト フェーシングはプロセス フェーシングのすべての機能を実現し、より効果的に実行できます。重要なのは、プロセス指向の思考を使用してオブジェクト指向プログラムを作成するのではなく、オブジェクト指向の思考を使用してオブジェクト指向の思考を使用することです。
3. この問題を解決するにはどうすればよいですか?
解決策の鍵は、アクションを分離することです。どうやって分けるのですか?まず第一に、コントローラーの役割を理解する必要があります。コントローラーは主にリクエストを転送し、http リクエストを特定のアクションに転送するコントローラーです。注: Struts にはコントローラー ファイルはありません (これはコントローラーがないという意味ではないことに注意してください)。アクション ファイルに直接マップされます。したがって、コントローラをルーティングと転送に直接配置し、実際のプロセス制御、ロジック処理などをアクションに配置することができます。
たとえば、上記の例では、次の 2 つのファイルに分けることができます。 registerAction.php
class registerAction extends Action{
function run(){
}
}
?> これによりアクションの分離が実現されます。 /user/login にアクセスする場合、リクエストには registerAction コードは含まれません。
しかし、これには 2 つの問題があります:
まず、実際のプロジェクトには大量のアクション ファイルが存在し、それらをいかに効率的に管理するかが鍵となります。
次に、同じ機能モジュール内の操作には共通のコードがある可能性がありますが、それを共有するにはどうすればよいでしょうか?
最初の問題は解決するのが簡単です。同じモジュールのアクションをサブフォルダーに配置します。これは、複数レベルのディレクトリが許可されることを意味します。たとえば、上記のコードでは、loginAction.php と registerAction.php をユーザー ディレクトリに配置できます。ただし、これによりルート配布の手間が増えることに注意してください。実装方法については読者が考える必要があります。
2 番目の問題を解決するのは難しくありません。重要なのは、オブジェクト指向の思考を持つことです。ここでは、オブジェクトの継承を使用してこれを実現できます。たとえば、上の例では、最初にユーザー抽象クラスを定義できます。 ? & Lt ;? l class user extends action () {
function __Contrut () {
// たとえば、権限チェック
}} & Gt; 次に、loginactions と registerActions を継承させます。これは非常にうまく解決できます。
4. まとめ
上記の解決策は最近の私の考えにすぎず、十分に完璧ではない可能性があります。特定のアプリケーションをさらに洗練し、最適化することができます。MVC やフレームワークに関して、PHP5 ではプロシージャよりもオブジェクトの方が適していて効果的だと常々思っています(オブジェクト自体を作成するコストを除けば)。関数を使ってフレームワークを実装するという点では、前回の PCTI の講義でも試しましたが、考え方は似ていると思いますが、どちらかというとオブジェクトの方が好きです。
最後に、上記の解決策は Java の Struts のアイデアをいくつか参照しています。ありがとう!