個人開発者向けのサービスの開発記録 #18 20240202

tyshgc
·

本日の作業

  • 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に置き換えて実装する感じで。

    • とはいえ、今のところ個人開発は自分一人しかいないプロジェクトだし、パブリックリリースまではまだ先のことなのでのちほどで。

← #17 #19 →

@tyshgc
デザインファーム及びスタートアップ(上場)などを経てフリーランスとして、様々なスタートアップや大手企業の新規事業の立ち上げ期における事業設計・アプリケーションの設計・開発、サービスのUX分析とデザインとエンジニアリングの両軸でお手伝いさせていただいています。 現在、個人開発者向けの支援サービスを個人開発中。 X Account: @tyshgc