💡 單一責任原則
single repository principle
- 責任(Responsibility)
- 強調高內聚,低耦合
- 需將責任封裝於各個 class 之中
- 如果多個職責總是同時發生,可將其封裝於同一 class 之中
Public class CustomerDataChart{
// connection
Public void getConnection()
{
//TODO : connection to DB
}
// Read
Public List<CustomersDto> Read()
{
// TODO : SELECT * FROM Custorm
}
// create
Public void Creat(CustomersDto data)
{
// TODO : create
}
// 顯示圖表
Public void displayChart()
{
// TODO : Show chart
}
}
由以上程式碼可以發現
- 一個 class 之中包含了
- 資料庫連線
- 查詢
- 新增
- 修改
- 此 class 違背了單一職責
- 如果需要修改資料庫連線方式
以單一職責進行重構
- 首先可以將其分為三個 Class
- DBUtil - 資料庫連線
- CustomerDAO - 對 Customer 進行增刪改查
- CustomerDataChart - 負責圖表生成
1. DBUtil
Public class DBUtil
{
//DB connection
Public void getConnection()
{
// TODO : connection to db
}
}
2. CustomerDao
Public class CustomerDao
{
// Read
Public List<CustomersDTO> Read()
{
// TODO : get data list
}
// Create
Public void Create()
{
// TODO : Create data
}
}
3. CustomerDataChart
Public class CustomerDataChart
{
Public void displayChart()
{
// TODO : show chart
}
}
常見問題
- 將所有功能寫在同一個 class
- 造成 class 複雜度過高
- 維護或修改時找不到問題
- 使用 class 時不知道要呼叫哪個 function
- 切分太細時會造成高耦合度的問題