mvc設計模式,MVC中的AOP

 2023-11-18 阅读 22 评论 0

摘要:一、 AOP是什么? AOP(Aspect-Oriented Programming),面向切面編程,看著是跟OOP(面向對象編程)挺相近的,但實際上又有什么區別呢?OOP具有封裝,繼承,多態等東西來定義從上到下這種層次關系࿰

一、 AOP是什么?

AOP(Aspect-Oriented Programming),面向切面編程,看著是跟OOP(面向對象編程)挺相近的,但實際上又有什么區別呢?OOP具有封裝,繼承,多態等東西來定義從上到下這種層次關系,但要想實現從左到右的關系的話就開始有點水土不服了,例如用戶的權限控制,操作日志等,這些與我們要實現的核心功能不大有關系的東西散布在我們代碼的周邊,顯示十分不好看。于是我們引入了AOP的模式。

AOP是一種編程范式,提供從另一個角度來考慮程序結構以完善面向對象編程(OOP)。

mvc設計模式。AOP為開發者提供了一種描述橫切關注點的機制,并能夠自動將橫切關注點織入到面向對象的軟件系統中,從而實現了橫切關注點的模塊化。

AOP能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任,例如事務處理、日志管理、權限控制等,封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。

二、 AOP能干什么,也是AOP帶來的好處

  1. 降低模塊的耦合度
  2. 使系統容易擴展
  3. 設計決定的遲綁定:使用AOP,設計師可以推遲為將來的需求作決定,因為它可以把這種需求作為獨立的方面很容易的實現。
  4. 更好的代碼復用性

mvc mvp、我們通常在實現一個頁面邏輯的時候,通常伴隨著操作日志,安全監測,事務處理等幾個邏輯,在實現邏輯的時候都要寫一大堆這種代碼。而AOP就是將這些與主體業務無關,但又有為業務提供服務的邏輯代碼封裝起來,降低模塊之間的耦合度。如圖所示中的圓柱體好比如我們的業務流程,aop代表的是那個橫向的操作,俗稱切面編程。或許上面的這些理論有點頭疼,對于AOP我的大體理解是:將那些與業務核心不大相關的雜七雜八的東西獨立開,每次實現了業務核心之前或之后,調用一下對應的方法。

三、 AOP的基礎實現

AOP這種切面編程能干很多事情,例如驗證登陸,權限,性能檢測,錯誤信息記錄等等,AOP的目的就是將這些東西分離開來,讓開發人員專注與核心關注點,下面用到一個簡單的驗證身份的例子。

在登陸的時候,我們簡單的將用戶信息放置于session["User"]中,通常在實現一些關鍵操作的時候,都會記錄用戶的信息,所以每次都要判斷一下session是否過期,但這動作應該由AOP來做

MVC設計模式,我們新建一個Attribute,用于驗證當前session是否過期,過期的話我們將跳轉到登陸頁

using System;
using System.Web.Mvc;
using System.Web.Routing;public class Authorized : AuthorizeAttribute
{public override void OnAuthorization(AuthorizationContext filterContext){if (filterContext == null){throw new ArgumentNullException("filterContext");}base.OnAuthorization(filterContext);if (filterContext.HttpContext.Session != null && filterContext.HttpContext.Session["User"] == null){filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary{{"controller", "Account"},{"action", "Login"},{"returnUrl", filterContext.HttpContext.Request.RawUrl}});return;}return;}
}

這樣的話我們就按照AOP的樣子實現了驗證身份是否過期,然后我們在控制器使用的時候,只需要在控制器方法頭部打上一個便簽就可以了,例如:

[Authorized]
public ActionResult GetMoreInfo()
{return new EmptyResult();
}

這樣我們就保證了進來GetMoreInfo這個控制器里面的時候,session不為空!引入了AOP,這樣我們就更能專注于核心代碼編程!

轉載于:https://www.cnblogs.com/guyun/p/6208390.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/174463.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息