クリーンアーキテクチャの書籍を読んだのでAPIサーバを実装してみた

クリーン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3">アーキテクチャ</a>の書籍を読んだので<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>サーバを実装してみた


クリーンアーキテクチャの書籍を読んだのでAPIサーバを実装してみた



はじめに

クリーンアーキテクチャの書籍を読んだので、実際にクリーンアーキテクチャの考え方を採用したREST APIをGO言語で実装してみた。

↓↓↓↓ソースコード↓↓↓↓

https://github.com/yoshinorihisakawa/sample-api-hoop/tree/develop

この記事ではクリーンアーキテクチャの説明というよりかは、実装ベースの実践的な内容にしている。


対象読者

・クリーンアーキテクチャで実装されたソースコードを理解したい人

・クリーンアーキテクチャの右下の図がよくわからない人

アーキテクチャについて勉強を始めた初心者


クリーンアーキテクチャとは?

クリーンアーキテクチャとは、8th Light, Inc.のブログ記事で提案されている。

一言で言うと、依存関係をコントロールし持続可能なソフトウェアを実現するための体系的な手法である。

※ DIやDIP、依存については知っていないと読みづらいかと思う。

 知らなければ、以下の記事を一読しておくと理解が深まると思う。

・DI、DIP(https://qiita.com/yoshinori_hisakawa/items/a944115eb77ed9247794)

・SOLIDの原則(https://qiita.com/yoshinori_hisakawa/items/25576a62123607a696f6)

・インタフェース(https://qiita.com/yoshinori_hisakawa/items/cc094bef1caa011cb739)


クリーンアーキテクチャを採用することで嬉しいこと

それではここからはアーキテクチャについて説明していく。

クリーンアーキテクチャ、オニオンアーキテクチャなど

どのアーキテクチャでも採用することで得られることは共通していると思う。

それでは、具体的に説明して行く。


フレームワークに依存しない

ソースコードは進化していくものであり、常に変化していくものである。

新しく便利なフレームワークに変更するときも、ドメインレイヤーに影響を与えることなく簡単に実現できる。


・テストが可能で書きやすい

各レイヤー同士が疎結合になっているため、テストが描きやすく。

少しの改修で、多くのテストが壊れることもない。


・UIから独立

UIは変わるものであり、UIが独立している事で、簡単に修正や変更が行える。

UIの変更がドメインに影響を与えることがなくなる。


・データベースから独立

どんなDBを使っても良い。

最初はpostgreSQLを使っていたがmysqlやMongo,Redshifなど変更することが出来る。

しかもドメインレイヤーなどに影響は受けない。


・外部機能独立

ドメインレイヤーは外部の事をなにも知らない。

なので外部機能を独立させることが出来る。


どうやって嬉しいことを実現するか?

ここからは「採用することで嬉しいこと」これをどう実現していくか説明していく。

ここからは、常に「依存関係がどうなっているのか」を意識して読む必要が出てくる。

以下の切り口で実現の方法を説明して行く。

アーキテクチャの図を見て各レイヤーの定義を理解していく。← イメージを掴む

・パッケージ構成と実際のソースコードを見て理解していく。← イメージを実装に落とし込む


クリーンアーキテクチャの図を用いて理解 ~イメージを掴む~

CleanArchitecture-pic.jpg

これがクリーンアーキテクチャの有名な同心円の図である。

それでは各レイヤーの役割を見て行く。