unknown-neko / unknown-neko.github.io

0 stars 0 forks source link

Railsを三層アーキテクチャから、四層アーキテクチャに変更したい #28

Open unknown-neko opened 10 months ago

unknown-neko commented 10 months ago

Rails5以降を把握していないので、Rails7の仕様を読むところからのスタート

MVCの問題点

MVCはFat Model、Fat Controller問題を起こしやすい。初学者ほど顕著に傾向が出る。

4層への変更案

こういったMVTCにすることで、Fat ControllerもFat ModelもTransactionにまとめやすくなる。

なぜ名称がServiceではなく、Transaction?

「一般的な名称だとService」だが、Serviceという名称で過去に導入してみたところ・・・ クラス名称(モジュール名称)だけでは、周りが使い方を察知できなかった。 Transactionであれば、基本情報が受かるレベルであればすぐに使い方は分かる。

Serviceだと、ゴッド化しやすいのでTransactionかAgentにしたい。

unknown-neko commented 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とかの兼ね合いどうする?という課題はあるものの、 強そう(未検証)

unknown-neko commented 10 months ago

コードの見た目がRailsっぽくない + Ractor依存なため、これを如何にスマートにユーザにバレないように並列化させる実装にするかプロトタイプが必要