エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

DBでcreateするときに、ControllerとServiceとRepositoryに書く内容【395日目】

注意

リポジトリパターンを学び始めの初心者なので、これが当たり前!って感じではないです!

合ってる!間違っている!等ありましたら教えていただけると嬉しいです!

一旦理想を考える

以下、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);
}