こんにちは。今回はクリーンアーキテクチャを紹介と思います。タイトルはC# .NET Coreと入れてますが、これはアーキテクチャであり、言語、フレームワークに依存する話ではありません。私はC#を調べているうちでMicrosoftのページで学習した為、このタイトルにしています。
Microsoftのページはこちら:一般的なWebアプリケーションアーキテクチャ
レイヤーアーキテクチャ
クリーンアーキテクチャに入る前に、昨今多くのシステムが採用しているMVCモデル、レイヤーアーキテクチャの復習から入ります。
代表的なレイヤーアーキテクチャでは、上記図のように分かれており、ユーザーはUI層を、UI層はビジネスロジック層を、ビジネスロジック層はデータアクセス層を呼び出すことでアプリケーションを実現しています。各層は、それぞれの役割に責任を負っています。
このアーキテクチャの欠点は、実装がUI層はビジネスロジック層に依存し、ビジネスロジック層はデータアクセス層に依存することです。時にはビジネスロジックなのにデータベースの種類に依存します。
また、ビジネスロジックのテストを行うにはテストデータベースを準備する必要があり、テストが十分に行えないなどが発生します。
クリーンアーキテクチャ
クリーンアーキテクチャでは、ビジネスロジックとアプリケーションモデルをアプリケーションの中心に置きます。データアクセスは、インフラストラクチャとして外側にし、依存性を逆転します。UI層とインストラクチャはアプリケーションコアに依存しますが、それぞれに依存があるとは限りません。
これを先ほどのレイヤーの図で表すと下記のようになります。
UI層は、アプリケーションコアで定義されたインターフェースを操作します。インフラストラクチャで実装された実装型を意識しないで実行できるのが理想です。ただし、アプリケーション実行には必要になるので、DIでもってきます。
アプリケーションコアは、インフラストラクチャに依存しないので単体でテスト実行可能です。また、外部依存関係があるインフラストラクチャのテストもUI層を省いてテスト実行が可能です。このようにしてそれぞれの層単体テストが容易になります。
おわりに
今回は、クリーンアーキテクチャを紹介しました。私もまだまだ学習中なところもあり、よく理解していません。ただ、このような考え方もあるということを頭の片隅に置いておいていただけたらと思います。