今天要和大家介紹的是代理模式
這個模式我個人覺得非常有用,好用
前言:
大家在寫程式時一定常常遇到要寫日誌,權限驗證....等等和主要邏輯不相干的事情
如果把上述這些動作寫在核心邏輯,會讓原有的程式碼變得雜亂
AOP(面向切面编程)可以有效的幫助我們解決上面問題,降低模塊間耦合度,理念來自於代理模式...
Asp.net MVC的ActionFilterAttribute就是Aop一個很好的例子
只要在Action上加一個自己做的Filter 就可在方法執行前後做事情,且不更動原來程式碼
因為不改動原有程式碼,可以降低Bug的發生機會,很經典的實現了OCP(開放封閉原則)
我會用已現實生活中常常遇到的[登入系統]來跟大家介紹代理模式的奧妙
這次會分三次來和大家分享:
- 什麼是代理模式,為什麼要用他
- 利用.NET實現靜態代理
- 利用.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一點呢?
在下回我會介紹靜態代理模式,來解決上面的問題
如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^