本日の作業
Viewに関するアーキテクチャの準備
Coreに関するアーキテクチャの準備
@pkg/uiでレイアウトに関するコンポーネントの実装
今回のアーキテクチャ
Business Logicのアーキテクチャ
Frontendでは宣言型のドメインオブジェクトを採用する。
ドメインモデルとユーザメンタルモデルを鑑みたモデルにする。
リポジトリパターンを採用してtRPCとの接続を行い、Viewで直接fetchしない。
これによってUI側のバリデーションをドメインモデル層に集約する。
UseCaseは宣言型ではなくhooksで表現する。
Remixはなるべく画面とルーティングにだけ集中する。
Backendはserverに集約してDMMFを採用し、ドメインイベント駆動でデータベースとの永続化・外部システムとの連携を行う。
Viewのアーキテクチャ
Feature-Sliced Designでのsharedの扱いは@pkg/uiに置く
entitiesより上のレイヤーは各種アプリに置くか、coreに置く
整理とインデックスのしやすさを考えるとcoreに置く方が良さそう
Reimx(ViewライブラリやWeb Framework)に依存する部分は以下あたり
app, pages, widgets
appsはRemixそのものなのでroot.tsxがそれ
pagesはRemixのroutesに相当し、loaderを持つPageコンポーネント
widgetsはRemixのactionを持つContainerコンポーネント
Remixに依存はしないがアプリケーションに依存する(例: admin appとuser appとあった場合それぞれに依存する)部分は以下
features, entities
entitiesはcoreにおいた方がいい気がしなくもない
となるとfeaturesもcoreにおいて置くのが無難な気がする
アプリケーションにもRemixにも依存しないものをFSDでいうところのsharedに置く。これはAtomic Designでいうところのatomsまたはmoleculesでその中でも汎用的なUI partsに相当する。またはユーティリティ的なHooksもここに入る。
そのほか、メモ
DMMFでググっている時に見つけた記事。DMMFは特に関係ないが管理ツールの実装はひとまずAdmin.jsあたりでいいのではと。これをRemixに置き換えて実装する感じで。
とはいえ、今のところ個人開発は自分一人しかいないプロジェクトだし、パブリックリリースまではまだ先のことなのでのちほどで。