クリーンアーキテクチャの実装例をISSUEサービスで紹介する
2022年03月21日 5:34
ニュースレター用の記事です。ISSUEで実装した例を元にクリーアーキテクチャの説明をしていこうと思います。一気に書き上げるには時間がかかるので徐々に内容を埋めていきます。ぜひ購読ボタンを押していただけると書き上げるモチベーションになるのでよろしくお願いします。
ISSUEバックエンドでクリーンアーキテクチャを踏襲して実装したディレクトリ構造は以下のようになります。
一番外側のレイヤーでフレームワークやDB接続など技術的な実装を置く場所になります。
DBで言うとMySQLやFrebase接続部分のhandlerとして実装する部分になります。clientを作成して、実際にDBへの永続化処理を行うためのDIするためなどに使われるケースが多い印象です。
DB |
External Interfaces |
UI |
Web |
Devices |
下記はfirestoreへの接続とそのhandlerを作成している実装例になります。
UsecaseとEntityに便利な形からデータベースやWebなど一番外側のFrameworks & Driversで利用しやすい形に変換します。このレイヤーではMVCモデルを内包した形になります。
Interface Adaptersに登場する概念
Controllers | web等でユーザーが入力した内容をUsecase用に変換して渡します |
Presenters | Usecaseの処理結果を出力します。 |
Gateways | repositoryなど永続化に関する処理が実装されます。 |
ControllersからUsecaseに変換したinputを渡す例
Gateway
repositoryでusecaseで利用するFirebaseへの永続化処理の例
Layered Architectureにおけるapplication層です。参考著書によると以下になります。
アプリケーション固有のビジネスルールが含まれており、システム全てのユースケースがカプセル化されて実装されています。
-- Robert C.Martin,角 征典,高木 正弘. Clean Architecture 達人に学ぶソフトウェアの構造と設計 (Japanese Edition) (Kindle の位置No.3161-3165). Kindle 版.
ここでは新たにたくさんの概念 が登場します。クリーンアーキテクチャ完全に理解したのテーブルの説明がわかりやすいので引用しました。
実際のinputとoutputを使った実装例
coming soon...
Layered Architectureにおけるドメイン層になります。ここにはビジネスルールがカプセル化されたEntitiesという概念があります。このEntitiesも外部の実装が変更されても影響されないようなものがきます。
domain modelの実装例
簡単ではありますが、golangとfirebaseでのクリーンアーキテクチャ実装例をご紹介しました。ここがわからない、もっと詳しく書いて欲しいなどありましたらコメントお待ちしています!
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。
目次を見る