Allied ArchitectsAllied ArchitectsEngineer Blog

第一章5 『サービスクラスとリポジトリクラスを生成するコマンドの作成とTodoモデルに関わるサービスとリポジトリの実装』

2022/03/11 Laravel

コントローラー周りの事は1記事で終わると思ったけど思ったより長くなってしまったので何回かに分割する。

 

app/Http/Controllersの下にController.phpとLabelController.phpとTodoController.phpがあるけど(LabelController.phpとTodoController.phpはモデルと一緒に作った)シングルアクションコントローラーにしたいのでLabelController.phpとTodoController.phpは消した。

Single Action Controllersシングルアクションコントローラ

app/Http/Controllers/Api/Todoディレクトリの中にシングルアクションコントローラーを作っていく。

Todoの登録はCreateTodo、一覧を取得するのはGetTodos、更新はUpdateTodo、削除はDeleteTodoという名前にした。

 

Labelも同様に作っていく。

 

リポジトリクラスとサービスクラスも作っていく。

vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.phpにmake:controllerのコマンドの設定が書いてあったのでこれを見ながらRepositoryクラスとServiceクラスを作るコマンドを作ってみる。

まずはコマンド作成。Generating Commandsコマンド生成

 

コマンドが実行された時に作られるファイルのテンプレートを置いておくディレクトリを作成

 

テンプレート用のテキストファイルを作成

 

いろいろ書いていく。

app/Console/Commands/stubs/repository.stubを以下のように編集。

 

コマンドを叩くときに作るリポジトリクラスの名前と使うモデルクラスの名前を受け取るようにした。

app/Console/Commands/RepositoryMakeCommand.phpを以下のように編集。

 

app/Console/Commands/stubs/service.invokable.stubを以下のように編集。

サービスクラスはコントローラーと同じくinvokeメソッドにした。

 

コマンドを叩くときに作るサービスクラスの名前と呼び出すリポジトリクラスの名前とその関数を受け取るようにした。

app/Console/Commands/ServiceMakeCommand.phpを以下のように編集。

 

コマンドを実行してリポジトリクラスを作ってみる。

 

これができた。

 

Labelのリポジトリクラスも作っておく。以下を実行した。

 

次はサービスクラスを作っていく。以下のコマンドを実行してみる。

 

これができた。

 

他のサービスクラスも作る。

 

コントローラーで呼び出すサービスクラスとそのサービスクラスが呼び出すリポジトリクラスが作れたのでリポジトリクラスの設定をいじっていく。

app/Repositories/TodoRepository.phpを以下のように編集する。

 

リポジトリクラスができたのでテストを書いていく。ターミナルで以下を実行してユニットテストを作成。

 

tests/Unit/Repositories/TodoRepositoryTest.phpを以下のように編集した。

 

テストを実行する。

 

こんな感じのが表示されれば成功。

サービスクラスにまだ引数とかを書いてなかったので書いていく。

app/Services/Todo/CreateTodoService.phpを以下のように編集。

 

app/Services/Todo/DeleteTodoService.phpを以下のように編集。

 

app/Services/Todo/GetTodosService.phpを以下のように編集。

 

app/Services/Todo/UpdateTodoService.phpを以下のように編集。

 

次はapp/Services/Todoに入っているサービスクラスのテストを書いていく。

 

tests/Unit/Services/CreateTodoServiceTest.phpを以下のように編集。

 

tests/Unit/Services/DeleteTodoServiceTest.phpを以下のように編集。

 

tests/Unit/Services/GetTodosServiceTest.phpを以下のように編集。

 

tests/Unit/Services/UpdateTodoServiceTest.phpを以下のように編集。

 

テストを実行する。

 

こんな感じのが表示されれば成功。

れっちり
  • れっちり
  • 2021年新卒入社。letroの開発・運用業務を担当しています。

RELATION ENTRY

第一章11『子コンポーネントにプロパティを渡してグループ分けしたtodoを表示する』

第一章11『子コンポーネントにプロパティ...

2022/04/22 Vue.js

前回、todoを期限でグループ分けしたのでtodoGroupsの中のtodoにアクセスするためにはtodoGroups.within.today.todos[0]というようにする必要がある。また、todoGroups.within.todayまで到達したあとの処理は期限切れ、今日のもの、明日のもの、...

続きを読む

第一章10 『取得したtodoを期限でグループ分けする』

第一章10 『取得したtodoを期限でグ...

2022/04/18 Vue.js

取得した後に期限ごとにグループ分けをしたいので関数を追加する。 まず、getTodos関数によって取得したtodosはidの昇順になっているので、期限の日付で並び替えを行う。 以下の関数をmethodsに追加する。getTodos関数で取得してきたtodosをdataのtodos(以後this....

続きを読む

れっちりの記事一覧へ

ページTOPへ