Eloquent使って、saveがしたい!
function saveName(\App\Models\User $user) { $user->name = "ringo"; return $user->save(); }
このコード、怖い!!!
なぜか?
もし、$userにすでに別な値がセットされてたら?
public updateUser() { $user = User::find(1); $user->age = 18; $this->saveName($user); }
もしこんなコードだったら?
saveNameって関数で、 name
とage
の両方を保存してしまう。
このときの$userのsaveは、nameをringoにして、かつageを18にするコードになる。
意図しない動作になってしまう。
なんでだめだった?($userにセットされた値を全て保存)
saveというのは、『$userにセットされた値を全て保存』という認識のほうが近く、
saveNameの影響する範囲が、見た目よりずっと広いこと。
saveNameって書いているけど、実は『$userのnameのセット』と『$userにセットされた値を全て保存』の両方に責務がある
ではどうするか(関数の分け方)
setName(あるいはsetParam)とsaveで分けるべきでしたφ(・・
テストコード書ける人は、ちょっとテストコードイメージすると、値が正しく保存しているかと、
セットされた値が保存できたかの2つに分かれるのがイメージできると思いますφ(・・