Optics
#型 #関数型プログラミング #デザインパターン
複数のデータ構造を横断する処理を、Opticsを通したget, setでカプセル化する
外部から観測可能(public)な振る舞い
ユースケース
ReadModel
WriteModel
メリット
サブタイピングや変性のような特徴を持っていても型安全にしやすい
SLAP原則に則ってカプセル化しやすい
trait的な挙動も表現しやすい
インタフェースを変更せずにセマンティクスを変更する
共有依存を扱う際のDIやlocal reasoningは、依存の主体定義を親ではなく末端に閉じさせることで疎結合にする & 後方互換性を維持する
コンポーサブルであり、Immutable Modelで表現できる
説明に出てくるlens, prismはメタファーっぽい
尋ねるな、命じろ (Tell, Don't Ask)
なにかしたければ難しいこと考えずにこのレンズを通して命令しろ、みたいな
宣言型プログラミングっぽい感じ
---
Introduction to optics: lenses and prisms
A (Very Short) Intro to Optics
Haskell/Lenses and functional reference
---
実装例
Lenses And Prisms #Rust
Functional references: Lens and other Optics in Scala by Alo Davì #Scala
https://python-lenses.readthedocs.io/en/latest/tutorial/optics.html #Python
(Type|ECMA|Java)Scriptのライブラリ
https://github.com/akheron/optics-ts
---
Atomic State Managementの源流になってるという話をどっかで聞いた
jotai-opticsなんてのもある