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
140
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 弱者の広報戦略を振り返る
pharma_x_tech
0
19
しくじり先生、PharmaXのLLMアプリケーション開発の失敗を語る
pharma_x_tech
0
160
LLMアプリケーションの実験管理・評価の工夫を紹介
pharma_x_tech
8
880
LLMアプリケーションの改善プロセスの構築
pharma_x_tech
0
250
チーム再編を伴う2年半のプラダクト開発から学ぶソフトウェアアーキテクチャ運用のコツ
pharma_x_tech
0
1.7k
LLMにサジェストさせたチャットの評価方法について
pharma_x_tech
0
640
薬剤師のチャットサジェストの評価と実験管理の本番運用
pharma_x_tech
1
290
新しいJSランタイムのDenoとBunに入門してみた
pharma_x_tech
0
66
2024.02.16_LLMを活用してオンライン薬局のオペレーションを自動化した話
pharma_x_tech
4
1.8k
Featured
See All Featured
Visualization
eitanlees
137
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
15
1.6k
Faster Mobile Websites
deanohume
300
30k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
What's in a price? How to price your products and services
michaelherold
238
11k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
GitHub's CSS Performance
jonrohan
1025
450k
Gamification - CAS2011
davidbonilla
77
4.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
20
1.8k
Web Components: a chance to create the future
zenorocha
306
41k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
67
14k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
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の依存関係逆転の原則実 装例