注意
リポジトリパターンを学び始めの初心者なので、これが当たり前!って感じではないです!
合ってる!間違っている!等ありましたら教えていただけると嬉しいです!
一旦理想を考える
以下、ServiceとRepositoryで呼び出しの理想形を書いてみる。
Service
function createUser(array $data) { return $this->user_repository->create($data); }
Repository
function create(array $data) { return $this->user->create($data); }
どっからデータ呼び出すん?
ということで、$dataを渡すControllerと、呼び出すMethodを用意しよう。
Controller
function post(xxxRequest $request) { $user_repository->createUserFromRequest($request); }
Service
function createUserFromRequest(Request $request) { return $this->createUser($request->all()); } function createUser(array $data) { return $this->user_repository->create($data); }
データの整形したいな
じゃあServiceに整形用のクラスを作ろう
Service
function createUserFromRequest(Request $request) { return $this->createUser($this->getUserDataFromRequest($request)); } function getUserDataFromRequest(request $request) { return array_merge( $request->only('name', 'password'), ['is_active' => true] ); }
結局何ができた?
こんな感じ
Controller
function post(xxxRequest $request) { $user_repository->createUserFromRequest($request); }
Service
// リクエストオブジェクトから、ユーザーを作成する function createUserFromRequest(Request $request) { return $this->createUser($this->getUserDataFromRequest($request)); } // データ整形 function getUserDataFromRequest(request $request) { return array_merge( $request->only('name', 'password'), ['is_active' => true] ); } // 配列からユーザーの作成 function createUser(array $data) { return $this->user_repository->create($data); }
Repository
function create(array $data) { return $this->user->create($data); }