一個類別應該只有一個改變的理由!
SRP的主要精神是提高內聚力,高內聚力意味著你只能想到一個理由去改變它!
SRP的使用時機:
- 當你想修改資料庫查詢語法與系統紀錄邏輯時,都會修改到同一個類別時,那就需要拆開!
- 類別中的一段程式碼有重複使用的需求
- 事先實作的未來需求程式碼
SRP的副作用:
- 類別變多耦合增加
SRP需注意的事項:
- 如果沒有足夠經驗去定義一個物件的Responsibility,即不需過早進行SRP規劃。
- 需不斷提升開發經驗與重構技術。
//不符合 SRP 精神
public class Program
{
public static void Main()
{
DataAccess.InsertData();
}
}
class DataAccess
{
public static void InsertData()
{
Console.WriteLine("Data inserted into database successfully");
Console.WriteLine("Logged Time:" + DateTime.Now.ToLongTimeString() + " Log Data insertion completed successfully");
}
}
//符合 SRP 精神
public class Program
{
public static void Main()
{
DataAccess.InsertData();
}
}
class DataAccess
{
public static void InsertData()
{
Console.WriteLine("Data inserted into database successfully");
Logger.WriteLog();
}
}
class Logger
{
public static void WriteLog()
{
Console.WriteLine("Logged Time:" + DateTime.Now.ToLongTimeString() +
" Log Data insertion completed successfully");
}
}