(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の依存関係逆転の原則実
装例