Slide 1

Slide 1 text

Rustでレイヤ化アーキテク チャを実装してみた 2023.10.18

Slide 2

Slide 2 text

(C)PharmaX Inc. 2023 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX 薬局DX事業部 エンジニアリーダ 4歳&2歳半(年子)の男子のパパ Twitter:@FooOzaki

Slide 3

Slide 3 text

3 (C)PharmaX Inc. 2023 All Rights Reserve 実装の全体概要

Slide 4

Slide 4 text

(C)PharmaX Inc. 2023 All Rights Reserve 4 レイヤ化アーキテクチャについて ・今回はヘキサゴナルアーキテクチャ で実装してみました

Slide 5

Slide 5 text

(C)PharmaX Inc. 2023 All Rights Reserve 5 4層のヘキサゴナルアーキテクチャで実装してみた

Slide 6

Slide 6 text

6 (C)PharmaX Inc. 2023 All Rights Reserve Rustでの レイヤ化アーキテクチャ実装例

Slide 7

Slide 7 text

(C)PharmaX Inc. 2023 All Rights Reserve 7 Cargoワークスペース を用いたレイヤー分離 ・Cargoワークスペースを利用 ・下位レイヤーから上位レイヤーの呼び 出しを禁止できる ・ApplicationからPresentationを呼び 出すことはできない

Slide 8

Slide 8 text

(C)PharmaX Inc. 2023 All Rights Reserve 8 アプリケーションレイヤー内での DI(依存性の注入)

Slide 9

Slide 9 text

(C)PharmaX Inc. 2023 All Rights Reserve 9 DI(依存性の注入) ・シンプルなコンストラクタインジェクショ ンパターンを採用 ・外部からrepositoryを受け取り、 usecaseに渡すことで依存性を注入して います ※derive-newを使用しています

Slide 10

Slide 10 text

(C)PharmaX Inc. 2023 All Rights Reserve 10 DI(依存性の注入) ・moduleという構造体を用意し、DIコン テナのようなことを実現 ・moduleはコンストラクタインジェクショ ンをシンプルに記述するだけ ・小さなアプリケーションであればこのよ うな形で定義してもそこまでストレスはな かった

Slide 11

Slide 11 text

(C)PharmaX Inc. 2023 All Rights Reserve 11 アプリケーションレイヤーとDB Adapterでの DIP(依存性逆転)

Slide 12

Slide 12 text

(C)PharmaX Inc. 2023 All Rights Reserve 12 DIP(依存関係逆転の原則)実践例 ・Domain(アプリケーションレイヤー)と Repository(データベースへの Adapter)に対してDIPを適用 ・アプリケーションレイヤーのDomainか らはRepositoryのインターフェースのみ 定義 ・実装はAdapterに任せる

Slide 13

Slide 13 text

(C)PharmaX Inc. 2023 All Rights Reserve 13 DIP(依存関係逆転の原則)実践例 ・実装は、Adapterレイヤーに ・DIPにより、データソースの変更が行わ れた際にアプリケーションレイヤーへ影 響が出ない実装に

Slide 14

Slide 14 text

(C)PharmaX Inc. 2023 All Rights Reserve 14 DIP(依存関係逆転の原則)実践例 ・Applicationレイヤーからの呼び出しも Domainレイヤーに限定が可能に ・UseCaseはDomainのインターフェー スのみ知っていれば良いため、Adapter の実装影響を受けない形に

Slide 15

Slide 15 text

15 (C)PharmaX Inc. 2023 All Rights Reserve まとめ

Slide 16

Slide 16 text

(C)PharmaX Inc. 2023 All Rights Reserve 16 まとめ レイヤー化アーキテクチャをRustで実践した例を紹介しました ● Cargoワークスペース を利用してレイヤーの制約を表現 ● DIの実践例を紹介 ○ DIコンテナに相当するものを構造体で定義 ● DIPの実践例を紹介 ○ アプリケーションレイヤーとAdapterの依存関係逆転の原則実 装例