在「重構-改善既有程式的設計」與「無瑕的程式碼」中都有資料傳輸物件/參數物件的章節或描述
不過書中舉的例子多是以成對存在或相關的數值為例子, ex: time range
在我個人的開發中有兩種情況會寫出帶有很多參數的方法, 那就是新增跟更新
以新增為例方法會長得像這樣: https://gist.github.com/anonymous/85443e3a7067e10bd44c12ac456ed39e
也看過寫成這樣的: https://gist.github.com/anonymous/d375b42e47a36fccf6de3490fb2f7089, 但這意味著要使用 create 方法必須了解內部用到了哪些 key-value, 所以我不喜歡這種寫法
所以我就想能不能建一個物件, 然後把新增時會用到的數值全部寫進裡頭後在丟進方法裡頭當參數: https://gist.github.com/anonymous/5efdefedab65cd4aaa80583d25a04f57
但這樣做之後卻又產生了新的疑問:
1. 要使用 create 的必須得了解 CreateUserParameters 開放了哪些 setter
2. 如果有一個 setter 沒有被呼叫的話, 對應的數值將為 null
3. 目前我是把參數物件都放在 ParameterObjects 這個命名空間下, 是否需要擴展命名空間變成 ParameterObjects/UserRepository, 然後把 CreateUserParameters.php 改成 Create.php?
以上幾個問題希望徵詢大家的意見, 如果有什麼不妥的地方也請多多指教, 謝謝