GUIのデータアーキテクチャと状態管理の変遷
#GUI
#アーキテクチャ
#設計
#状態管理(GUI)
#技術の審美眼
#opinionated
フロントエンドのレンダリングアーキテクチャ
とは別物
主に
SPA
の世界の話
---
歴史(過去)を話す
---
似ている記事
SPAにおける状態管理:関数型のアプローチも取り入れるフロントエンド系アーキテクチャの変遷
WIP
https://www.notion.so/FE-b936264bd83149cf89c1a583d9aab737?pvs=4
koushisa.icon
が
メタ認知
してきた
技術の歴史
(下に向かうにつれ現代に近づく & 個人的な関心が高い)
MV*以前
GUI Architectures
開発者が知っておくべき、6つのUIアーキテクチャ・パターン
MV*
MVC
MVVM
リアクティブ
な
Stream
Rx
Elf
BLoCパターン
Mixin
Container/Presenterパターン
Higher-Order Component
Recompose
Render Props
単方向データフロー(unidirectional data flow)
MV*脱却の経緯:
フロントエンドでMV*フレームワークを使わない理由
The Elm Architecture
State-Action-Model (SAM)パターン
Flux
Redux
,
Redux Toolkit
React Hooks
パターン
React > Context
Proxy
パターン
MobX
Valtio
Finite State Machine(FSM)
パターン
XState
CQS
Almin.js
The Composable Architecture
GraphQL
Riverpod アーキテクチャ
ミニマムな状態コンテナ
Zustand
nanoStore
Pinia
renderHooksパターン
ウィジェット
Render As You Fetchパターン
Signal
Data-Flow Graph
Atomic State Management
React
way
Layoutコンポーネント
Lifting state up
2023年~
Server-Driven UI
マイクロフロントエンド
サーバを巻き込んだ
CQRS
や
メッセージパッシングとしてのオブジェクト指向
技術基盤の進化に期待している
Next.js
と
App Router
と
Edge
あたりをまとめた
Simple
志向
React Server Componentsをアーキテクチャとしてどう捉えるか
マイクロフロントエンドとキャッシュを前提としたCQSアーキテクチャを考える
イベント駆動設計の戦略
番外編
3D
,
ゲーム開発
ECS(Entity Component System)
DOTS(Data-Oriented Technology Stack)
「
ソフトウェア工学としてのオブジェクト指向
は終わった」と言われる背景
現代のオブジェクト指向の class の割れ窓化と宣言的プログラミング
現代の主流は「宣言的プログラミング」であると思っている。これは
リソース
の宣言と、その状態遷移の手続きや振る舞いの付与が中心にある。
技術基盤の進化
#宣言型プログラミング
#単方向データフロー(unidirectional_data_flow)
TSの
漸進的型付け
による
型
システム
関数型プログラミング
注目の背景
データ構造と振る舞いを切り離す
問題解決空間と
時空
の
抽象化
Immutable Model
,
代数的データ型(ADT)
,
パターンマッチング
スコープは小さいに越したことはない
副作用
の局所化や
中間状態
の廃止から得られる
テスト容易性
単方向データフロー(unidirectional data flow)
がゲームチェンジャーだった
GUIの主体はユーザーである
外側に近いモジュールほど一方通行のストーリーを作る
ドメインイベント(Domain Event )
を
SSoT(唯一の情報源)
とする
テスト設計
にも影響を与える
→
テスティングトロフィー
と
testing-library
によるintegrationテスト
Reducer
への
ホワイトボックステスト
のみでは
組合わせ爆発
を起こしていた
リファクタリング耐性
も低く、UIとしては意味のあるテストになりづらかった
これらの
BDD
フレームワークは
ビジネス要求
の問題領域上で意味のある振る舞いをテストする
ビジネス要求の問題領域上で意味のある振る舞い =
ドメインイベント(Domain Event )
GUI
の
ドメインイベント(Domain Event )
= ユーザーのインタラクションのイベントハンドラ
実装も
ドメインイベント(Domain Event )
を意識したデータフローにする
例
a11y
をロケータとする
ユーザーの操作を模倣して
ドメインイベント(Domain Event )
を発生させる
前後の
DOM
のスナップショットを検証する
意味のある振る舞いの
テスト
が書きやすくなった
最近は
interaction test
に注目している
koushisa.icon
バックエンドにも輸入される動きがある
TypeScript による GraphQL バックエンド開発
システム設計向けに一般化しているのが
Domain Modeling Made Functional
残念ながら
フレームワーク
が追いついていない印象
---
他
リアクティブステート参照の勘所
GUIアーキテクチャの変遷について理解する
React 状態管理ツールの沼にハマった話
#Redux_Toolkit
#Recoil
#TanStack_Query
#React_>_Context
#Zustand
#Jotai
フロントエンドのコンポーネント設計
List of state management approaches | Flutter
関連
関心の分離はドメインとプレゼンテーションから考える(PDS)
流行った技術の代替が登場するきっかけと今後のトレンドの考察