Open unknown-neko opened 10 months ago
Transactionという名称ではなくTaskFlowで良い気がしてきた。
def ControllerのAction
Ractor起動(params)
.欲しい人はDBのロック
.欲しい人は「処理中」みたいなグルグルマークを出すために、HTMLやJSなりWebAssemblyに指示
.RactorにTaskFlowをN個渡す(ダーティリードとか特に無いなら並列でタスク実行)
.必要なら1個でも事故ったらDBのロールバック
.必要ならDBロック解除
.必要なら結果通知のHTMLやJSなり、WebAssemblyへpush通知
# WebAssemblyなら、古代のBlazeDSのようなバイナリ渡しもできる?
#「 jsonで返して後はフロントで」もできる気がする
拡張子毎の返却処理(Ractor起動中に返すもの処理)
end
これで非同期の、フルコアぶん回しバックエンド言語 + Frameworkが誕生する(?)
unicorn、puma、nginxとかの兼ね合いどうする?という課題はあるものの、 強そう(未検証)
コードの見た目がRailsっぽくない + Ractor依存なため、これを如何にスマートにユーザにバレないように並列化させる実装にするかプロトタイプが必要
Rails5以降を把握していないので、Rails7の仕様を読むところからのスタート
MVCの問題点
MVCはFat Model、Fat Controller問題を起こしやすい。初学者ほど顕著に傾向が出る。
4層への変更案
こういったMVTCにすることで、Fat ControllerもFat ModelもTransactionにまとめやすくなる。
なぜ名称がServiceではなく、Transaction?
「一般的な名称だとService」だが、Serviceという名称で過去に導入してみたところ・・・ クラス名称(モジュール名称)だけでは、周りが使い方を察知できなかった。 Transactionであれば、基本情報が受かるレベルであればすぐに使い方は分かる。
Serviceだと、ゴッド化しやすいのでTransactionかAgentにしたい。