質問: Laravel5を使った開発でinterfaceを利用したリポジトリパターンを用いようと思っています。 そこでEloquentの`save()`や`findOrFail()`等が投げる例外をドメイン層やアプリケーション層で処理すると、その部分がインフラストラクチャ層に依存してしまう(リポジトリの実装を入れ替えた際に上のレイヤーで問題が起こる)と思うのですが、インフラストラクチャ層で一度例外をキャッチし、独自に作成した例外を投げ直すなどの処理を行う方がよいのでしょうか。
回答: Laravel5もEloquentも分からないですが、一般論として話せそうなので回答してみます。 このようなケースでは、独自の例外クラスをドメイン層やアプリケーション層に定義し、インフラ層で発生した例外をその独自例外に変換して再スローするのが良いと思います。 ※インフラ層は、ドメイン層やアプリケーション層に依存できますよね? 当然ですが、この独自例外は、ドメイン層であれば「ドメインモデルの言葉」として表現されるクラスであるべきですし、アプリケーション層のものであればアプリケーション層での言葉を使います。 ※ドメインモデルにその例外が発生した状況を表す言葉が無いのであれば、恐らくそれはドメイン層ではなく、アプリケーション層に定義すべき例外なのだと判断できます。