MVC AOP指向プログラミング
誰もがAOPという言葉にさらされていないと思いますが、実際、あなたはすでに設計モードでそれにさらされています。 AOPが使用するアイデアは、実際には設計パターンと同じです。つまり、関数は元のコードを変更せずに追加または変更されます。また、AOPは主に春に使用されますが、この記事で書かれているものはMVCでのみ使用されるため、注意してください。
1。はじめに
いわゆるAOP(アスペクト指向プログラミングの略語)とは、実行時に事前コンパイル方法と動的エージェントを通じてプログラム機能の統一されたメンテナンスを実装するテクノロジーを意味します。 AOPは、OOPの継続であり、ソフトウェア開発のホットトピック、Springフレームワークの重要な部分、および機能プログラミングの派生パラダイムです。ビジネスロジックのさまざまな部分をAOPを使用して分離することができ、それにより、ビジネスロジックのさまざまな部分間の結合を減らし、プログラムの再利用性を改善し、開発の効率を改善することができます。
上記は、Baidu百科事典の公式の説明ですが、私の意見では、AOPは実際には一種の考えであり、体全体を動かしてつなぐことができる一種の考えです。 AOPは、実際には、同意関数または呼び出しプロセスによって書かれたプログラム本体に直面しています。アスペクトを指す最初の単語の側面から、この方法は1つの側面を実装することも理解できます。これは実際にはMVCのグローバルファイルと非常に似ており、Springフレームワークの重要な部分でもあります。これは、機能プログラミングの派生パラダイムです。ビジネスロジックのさまざまな部分をAOPを使用して分離することができ、それにより、ビジネスロジックのさまざまな部分間の結合を減らし、プログラムの再利用性を改善し、開発の効率を改善することができます。
第二に、その事前コンパイルの性質は、いくつかのエラーを適切に処理したり、いくつかの状況を損なうことができます。これは、設計時に何かの権限と統一された出力を判断する際により一般的になることにもつながります。 「テクノロジーは、事前コンパイル方法とランタイム中に動的プロキシを通じて実現でき、ソースコードを変更せずにプログラムに動的に機能を追加します。AOPは実際にはGOFデザインパターンの継続です。デザインパターンは、発信者とカリーの間のデカップを疲れ果てており、コードの柔軟性とスケーラビリティを改善します。上記の文は、AOPの良い解釈でもあります。
2。MVCでの実装
たくさん言ったので、見てみましょう。まず、対Vsで新しいMVCプロジェクトを作成し、MVC3または4を選択する必要があります。問題なく、コントローラーを作成し、自由に名前を付けてから、そのビューを作成し、ビューに最も簡単なHelloworldを作成します。
<!doctype html> <html> <head> <title> index </title> </head> <body> <div> <a>こんにちは! world </a> </div> </body> </html>
右側の写真は、作成したMVCソリューション、追加のコントローラー、ビューを示しています。上記のコードをビューに書いて、こんにちは!世界。
実行後(機能しません)HelloWorldという言葉はWebページに表示されますか?
次に、新しいAOPファイルの作成を開始してから使用します。まず、FilterPublicと呼ばれるこのプロジェクトに新しいクラスを追加し、リファレンスでSystem.Web.MVCを使用して参照を追加し、ActionFilterAttributeからこのクラスを継承させます。誰もがアクションという言葉に注意を払う必要があります。つまり、このことはアクションに基づいています。
次に、次のコードを書きます。
public string message {get;セット; } public override void onactionexecuting(actionexecutedContext filterContext){base.OnactionExecuting(filterContext); filtercontext.httpcontext.response.write( "action execution" + message + "<br />"); } public Override void onactionExecuted(ActionExecutedContext FilterContext){base.OnactionExecuted(filterContext); filtercontext.httpcontext.response.write( "アクションの実行後" + message + "<br />"); } public Override void onResultExecuting(resultexecutingContext filterContext){base.onResultExecuting(filterContext); filtercontext.httpcontext.response.write( "return before result" + message + "<br />"); } public Override void onResultExecuted(resultexecutedContext filterContext){base.onResultExecuted(filterContext); filtercontext.httpcontext.response.write( "return after" + message + "<br />"); }これは、フィルターによってトリガーされるさまざまなアクションであり、次に、コントローラーのデフォルトメソッドに次の変更を加えます。
[<span style = "font-size:18px;"> filterpublic < /span>(message = "action")] public ActionResult index(){httpcontext.response.write( "アクションは・・ <br />"); return content( "result・・ <br />"); }次に、コントローラーのクラスクラスに文[filterpublic(message = "controller")]を追加して、実行します。何が起こりますか?
実行アクションが実行される前のアクション実行アクションが返された後、実行アクションが結果を返す前に結果を返します。
コントローラー内のメソッドが実行される前に、最初に以下に設定したFilterPublicでコードを実行することがわかります。また、アクションが異なる時期に行われるため、どの方法がトリガーされるかを確認できます。
ただし、コントローラーに記述されたコントローラーベースのメソッドはトリガーされませんでした。なぜこれがなぜですか?
実際、この問題は非常に簡単です。 AOPプログラムを設定したとき、パラメーターを設定せず、フィルターを重ね合わせることもできませんでした。この時点で、次のことを追加します。この時点で、実行してみましょう。
アクションが実行される前のコントローラー。アクションが実行されます。アクションが実行されます。 アクションが実行された後。アクションが実行されます。アクションが実行された後。コントローラーは結果の前に戻ります。コントローラーは結果の前に戻ります。結果が戻ってきています。結果が戻ってきています。結果としてコントローラーが戻ります。
このようにして、コントローラーのフィルターもトリガーされているため、AOPメソッドを使用する場合は、独自の書面によるメソッドまたはページのデフォルトの読み込み方法でフィルタークラスタグを記述するだけです。
それで、すべてのページをトリガーする必要がある関数がある場合、それは面倒ではないでしょうか?心配しないでください、それは私たちの現時点で働く番です。 global.asaxファイルの下で、登録globalfiltersメソッドの下に書いたフィルターを登録するだけです。
public static void RegisterGlobalFilters(GlobalFilterCollection Filters){filters.add(new handerErrorattribute()); //独自のフィルターをグローバルフィルターとして定義します。Add(new <span style = "font-size:18px;"> filterpublic </span>(){message = "global <br/>"}); }次に、実行して結果を確認します。
実行前のアクショングローバルアクション実行前の実行コントローラー実行実行実行前の実行実行前のアクション実行前のアクション実行後、実行後のアクション
このようにして、グローバルトリガーが行われます(フィルター内のメッセージは、階層を識別するためにのみ使用され、正式に使用すると定義できません。)
この観点から、グローバルメソッドをすばやく追加する場合は、新しいフィルターを作成してからグローバルファイルを変更するだけです。とても便利ではありませんか?
上記は、AOPに関する私の簡単な研究の一部です。エラーがある場合は、修正してください。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!