ProxyPattern代理模式(一)

今天要和大家介紹的是代理模式

這個模式我個人覺得非常有用,好用

前言:

大家在寫程式時一定常常遇到要寫日誌,權限驗證....等等和主要邏輯不相干的事情

如果把上述這些動作寫在核心邏輯,會讓原有的程式碼變得雜亂

AOP(面向切面编程)可以有效的幫助我們解決上面問題,降低模塊間耦合度,理念來自於代理模式...

 

Asp.net MVC的ActionFilterAttribute就是Aop一個很好的例子

只要在Action上加一個自己做的Filter 就可在方法執行前後做事情,且不更動原來程式碼

因為不改動原有程式碼,可以降低Bug的發生機會,很經典的實現了OCP(開放封閉原則)

我會用已現實生活中常常遇到的[登入系統]來跟大家介紹代理模式的奧妙

這次會分三次來和大家分享:

  1. 什麼是代理模式,為什麼要用他
  2. 利用.NET實現靜態代理
  3. 利用.NET實現動態代理

 

本文:什麼是代理模式,為什麼要用他

 

假如我們要寫一個登入程式,在第一版時我們將他的核心邏輯寫完[檢查使用者是否合法]

/// <summary>
/// 檢查用戶是否合法
/// </summary>
/// <returns></returns>
public bool IsUserAuth(UserModel user)
{
    return userList.GetAllUser()
        .Any(o => user.UserName == o.UserName && user.Password == o.Password);
}

如果沒使用動態代理會怎麼來寫Log呢?

 

/// <summary>
/// 檢查用戶是否合法
/// </summary>
/// <returns></returns>
public bool IsUserAuth(UserModel user)
{
    Console.WriteLine($"使用者登入:帳號={user.UserName} 密碼={user.Password}");
    return userList.GetAllUser()
        .Any(o => user.UserName == o.UserName && user.Password == o.Password);
}

(已Console.WriteLine來代替寫log的程式碼)
在執行前後寫上Log,但這樣讓程式碼可讀性變差了點,因為Log和檢查使用者是否登入完全沒關係!

那我們要怎麼做才可讓程式碼Clear一點呢?

在下回我會介紹靜態代理模式,來解決上面的問題               

 

 

 

 

 


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^