connect-goとsqlboilerで構築するクリーンアーキテクチャ
by
hirocy
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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も是非!