文章目錄
前言
一、資訊專家原則(Information Expert Principle)
二、使用步驟
示例
GRASP:General Responsibility Assignment Software Patterns 通用職責配置設定軟體模式。
首先我們先來區分下GRASP與GOF模式的差別,它們主要在什麼時候用,用來做什麼。在軟體開發過程中,我們常說面向對象開發,面向對象思想應該貫穿整個軟體開發生命周期。我們在将現實世界中的業務對象及業務功能抽象成軟體系統中的系統對象過程中應該遵循使用GRASP模式。而在具體技術實作上應該遵循使用GOF設計模式,來實作系統功能。即GRASP主要使用在分析設計階段,與具體技術無關;而GOF模式主要使用在開發階段,與具體技術相關,它是對GRASP設計成果進行實作時而使用,是一種開發階段的設計模式。
GRASP軟體設計模式包括9個模式:建立者、資訊專家、低耦合、控制器、高内聚、多态性、純虛構、間接性、防止變異。
提示:以下是本篇文章正文内容,下面案例可供參考
資訊專家模式 (Information Expert Pattern)
(1) 問題:給對象配置設定職責的通用原則是什麼?
(2) 解決方案:将職責配置設定給擁有履行一個職責所必需資訊的類,即資訊專家。
(3) 分析:資訊專家模式是面向對象設計的最基本原則。通俗點來講,就是一個類隻幹該幹的事情,不該幹的事情不幹。在系統設計時,需要将職責配置設定給具有實作這個職責所需要資訊的類。資訊專家模式對應于面向對象設計原則中的單一職責原則。
public class AES {
public string Decrypt(string ciphertext, string salt) {
throw new NotImplementedException();
}
public void Post(string url, string cleartext, Dictionary<string, string> heads) {
throw new NotImplementedException();
}
}
AES解密類,Decrypt方法為解密方法,需要傳遞密文和鹽,這個類中包含了另外一個方法Post以向某個url發送明文資料。
顯然Post方法不應該屬于AES類,因為職責配置設定不合理。解密類應專注于解密動作,發送資料的Post方法應該封裝在另外一個類中。以下是解決方案:
public class AES {
public string Decrypt(string ciphertext, string salt) {
throw new NotImplementedException();
}
}
public class PostUtil {
public static void Post(string url, string content,
Dictionary<string, string> heads) {
throw new NotImplementedException();
}
}
經過簡單的改造,AES類變成了AES解密的資訊專家,而PostUtil工具類變成了發送資料的資訊專家。