Skip to content

MingJen/srp-exercise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 

Repository files navigation

背景

SRP公司的財務每週結算工資,計算方式如下
- 時薪 200 元 (星期一到星期五,最多8小時)
- 加班時薪 350 元(星期一到星期五超過8小時的部份算加班,六日整天都算加班時數)
因為勞動局有規定每週工時不能超過60小時
如果有違反規定的話會有罰款
而且每週要把工時報告上傳給勞動局

這週星期三是 SOLID 國的國慶日
勞動局突然公佈這天工作的工資計算要把工時以兩倍計算
財務找了工程師調整了計算的方式,並且測試沒問題後上線了

幾天後,營運長突然收到了勞動局的罰款通知
才發現工時報告和打卡記錄的工時完全對不起來...

目標

參考 Clean Architecture 第 7 章 SRP

把 Employee 的 工資計算工時報表 拆成 PayCalculatorHourReporter

避免因為 regularHours 計算方式不同互相影響

範例原始碼可以參考 https://github.com/MingJen/srp-exercise/blob/master/php/src/Employee.php

任務

  1. 重構出 PayCalculatorHourReporter 並確認通過測試
  2. 看能不能讓 regularHours 的計算只存在一個地方

計算範例

星期 工時 假日
星期日 4 Y
星期一 9 N
星期二 8 N
星期三 5 N
星期四 9 N
星期五 9 N
星期六 7 Y

RegularHours = 8 + 8 + 5 + 8 + 8 = 37

OvertimeHours = 4 + (9-8) + 0 + 0 + (9-8) + (9-8) + 7 = 14

Pay = 37 * 200 + 14 * 350 = 12,300

星期三工時 2 倍時計算範例

RegularHours = 8 + 8 + (5 * 2 - 2) + 8 + 8 = 40 // 星期三工時變2倍,但是仍保持單日最多 8 小時

OvertimeHours = 4 + (9-8) + 0 + 2 + (9-8) + (9-8) + 7 = 16

Pay = 40 * 200 + 16 * 350 = 13,600

注意 HourReporter 一樣保持 RegularHours 37 小時

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •