Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustでレイヤ化アーキテクチャを実装してみた
Search
PharmaX(旧YOJO Technologies)開発チーム
October 18, 2023
0
120
Rustでレイヤ化アーキテクチャを実装してみた
こちらのイベントのLT登壇資料です
https://yojo.connpass.com/event/296355/
PharmaX(旧YOJO Technologies)開発チーム
October 18, 2023
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
しくじり先生、PharmaXのLLMアプリケーション開発の失敗を語る
pharma_x_tech
0
73
LLMアプリケーションの実験管理・評価の工夫を紹介
pharma_x_tech
8
800
LLMアプリケーションの改善プロセスの構築
pharma_x_tech
0
220
チーム再編を伴う2年半のプラダクト開発から学ぶソフトウェアアーキテクチャ運用のコツ
pharma_x_tech
0
1.6k
LLMにサジェストさせたチャットの評価方法について
pharma_x_tech
0
620
薬剤師のチャットサジェストの評価と実験管理の本番運用
pharma_x_tech
1
260
新しいJSランタイムのDenoとBunに入門してみた
pharma_x_tech
0
27
2024.02.16_LLMを活用してオンライン薬局のオペレーションを自動化した話
pharma_x_tech
4
1.6k
Firebaseプロジェクトに複数のFirestoreのデータベースを作成する
pharma_x_tech
1
12
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
260
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
We Have a Design System, Now What?
morganepeng
43
6.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Facilitating Awesome Meetings
lara
42
5.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Clear Off the Table
cherdarchuk
84
310k
Code Review Best Practice
trishagee
55
15k
Transcript
Rustでレイヤ化アーキテク チャを実装してみた 2023.10.18
(C)PharmaX Inc. 2023 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX
薬局DX事業部 エンジニアリーダ 4歳&2歳半(年子)の男子のパパ Twitter:@FooOzaki
3 (C)PharmaX Inc. 2023 All Rights Reserve 実装の全体概要
(C)PharmaX Inc. 2023 All Rights Reserve 4 レイヤ化アーキテクチャについて ・今回はヘキサゴナルアーキテクチャ で実装してみました
(C)PharmaX Inc. 2023 All Rights Reserve 5 4層のヘキサゴナルアーキテクチャで実装してみた
6 (C)PharmaX Inc. 2023 All Rights Reserve Rustでの レイヤ化アーキテクチャ実装例
(C)PharmaX Inc. 2023 All Rights Reserve 7 Cargoワークスペース を用いたレイヤー分離 ・Cargoワークスペースを利用
・下位レイヤーから上位レイヤーの呼び 出しを禁止できる ・ApplicationからPresentationを呼び 出すことはできない
(C)PharmaX Inc. 2023 All Rights Reserve 8 アプリケーションレイヤー内での DI(依存性の注入)
(C)PharmaX Inc. 2023 All Rights Reserve 9 DI(依存性の注入) ・シンプルなコンストラクタインジェクショ ンパターンを採用
・外部からrepositoryを受け取り、 usecaseに渡すことで依存性を注入して います ※derive-newを使用しています
(C)PharmaX Inc. 2023 All Rights Reserve 10 DI(依存性の注入) ・moduleという構造体を用意し、DIコン テナのようなことを実現
・moduleはコンストラクタインジェクショ ンをシンプルに記述するだけ ・小さなアプリケーションであればこのよ うな形で定義してもそこまでストレスはな かった
(C)PharmaX Inc. 2023 All Rights Reserve 11 アプリケーションレイヤーとDB Adapterでの DIP(依存性逆転)
(C)PharmaX Inc. 2023 All Rights Reserve 12 DIP(依存関係逆転の原則)実践例 ・Domain(アプリケーションレイヤー)と Repository(データベースへの
Adapter)に対してDIPを適用 ・アプリケーションレイヤーのDomainか らはRepositoryのインターフェースのみ 定義 ・実装はAdapterに任せる
(C)PharmaX Inc. 2023 All Rights Reserve 13 DIP(依存関係逆転の原則)実践例 ・実装は、Adapterレイヤーに ・DIPにより、データソースの変更が行わ
れた際にアプリケーションレイヤーへ影 響が出ない実装に
(C)PharmaX Inc. 2023 All Rights Reserve 14 DIP(依存関係逆転の原則)実践例 ・Applicationレイヤーからの呼び出しも Domainレイヤーに限定が可能に
・UseCaseはDomainのインターフェー スのみ知っていれば良いため、Adapter の実装影響を受けない形に
15 (C)PharmaX Inc. 2023 All Rights Reserve まとめ
(C)PharmaX Inc. 2023 All Rights Reserve 16 まとめ レイヤー化アーキテクチャをRustで実践した例を紹介しました •
Cargoワークスペース を利用してレイヤーの制約を表現 • DIの実践例を紹介 ◦ DIコンテナに相当するものを構造体で定義 • DIPの実践例を紹介 ◦ アプリケーションレイヤーとAdapterの依存関係逆転の原則実 装例