connect-goとsqlboilerで構築するクリーンアーキテクチャ
by
hirocy
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
connect-goとsqlboilerで構築する クリーンアーキテクチャ hirocy
Slide 2
Slide 2 text
{広告なんでも, pixiv Ads}チーム エンジニア 💼 23新卒/広告開発 ❤ Go言語/VTuber https://x.com/hir0cy hirocy
Slide 3
Slide 3 text
話すこと ● クリーンアーキテクチャとは ● connect-go・sqlboilerとは ● 広告管理サーバーを設計した際の最終的なディレクトリ 構成の紹介 ● connect-go・sqlboilerをクリーンアーキテクチャに取 り込む上での工夫
Slide 4
Slide 4 text
話さないこと ● connect-goとsqlboilerの使い方 ● 基本的なクリーンアーキテクチャの実装 Ask the Speakerで僕と握手!
Slide 5
Slide 5 text
クリーンアーキテクチャ とは?
Slide 6
Slide 6 text
クリーンアーキテクチャ ● Robert C. Martinが2012年に提唱したアーキテクチャ ● 4層のレイヤー構造 ○ Enterprise Business Rules(domain層) ○ Application Business Rules(usecase層) ○ Interface Adapters(interface層) ○ Frameworks & Drivers(infrastructure層)
Slide 7
Slide 7 text
クリーンアーキテクチャ ● Robert C. Martinが2012年に提唱したアーキテクチャ ● 4層のレイヤー構造 ○ Enterprise Business Rules(domain層) ○ Application Business Rules(usecase層) ○ Interface Adapters(interface層) ○ Frameworks & Drivers(infrastructure層)
Slide 8
Slide 8 text
connect-go・sqlboiler とは?
Slide 9
Slide 9 text
connect-goの特徴 ● The Go implementation of Connect: Protobuf RPC that works. ● ConnectというプロトコルのGo実装 ● Protobufで記述された通信の定義に基づいてGoのパッ ケージを生成
Slide 10
Slide 10 text
sqlboilerの特徴 ● Generate a Go ORM tailored to your database schema. ● 実際のDBスキーマからGoのORM(Object-Relational Mapping)をパッケージとして生成
Slide 11
Slide 11 text
どちらもパッケージ生成
Slide 12
Slide 12 text
クリーンアーキテクチャ のどこに生成?
Slide 13
Slide 13 text
〜広告管理サーバーの場合〜 最終的なディレクトリ構成
Slide 14
Slide 14 text
最終的なディレクトリ構成 "esakik/clean-architecture-python" (https://github.com/esakik/clean-architecture-python) より引用
Slide 15
Slide 15 text
最終的なディレクトリ構成
Slide 16
Slide 16 text
なぜinterface層に生成? ● 例えばconnectについて... ○ interface層 ■ 通信の中身を見るレイヤー ○ infrastructure層 ■ 通信について記述するレイヤー →ハンドラーやDBのクエリをinterface層で記述したい
Slide 17
Slide 17 text
connect-go・sqlboiler を扱う上での工夫
Slide 18
Slide 18 text
sqlboilerを扱う上での工夫 ● sqlboilerは独自の型とdomainとの変換が必要 ○ converterを実装して対応 ● sqlboilerの実行には*sql.DBが必要 ○ infrastructure層で接続を張った*sql.DBを返すよう に実装
Slide 19
Slide 19 text
connect-goを扱う上での工夫 ● 決められたHandlerの型 で実装する必要がある ● interactorから presenterを呼ぶ流れと 相性が悪い "esakik/clean-architecture-python" (https://github.com/esakik/clean-architecture-python) より引用
Slide 20
Slide 20 text
connect-goを扱う上での工夫 controllerから presenterを呼び出す
Slide 21
Slide 21 text
connect-goを扱う上での工夫 controllerから presenterを呼び出す
Slide 22
Slide 22 text
connect-goを扱う上での工夫 "クリーンアーキテクチャの Presenter が分かりにくいのは MVC 2 じゃないから" (https://qiita.com/os1ma/items/c02af5b7783b58165c8d) より引用
Slide 23
Slide 23 text
まとめ ● connect-goとsqlboilerはinterface層に生成 ● presenterをcontrollerから呼び出すように改変 ● 都度リファクタリングをすることでより良いアーキテク チャにしている ● Goの互助会ブースやAsk the Speakerも是非!