#72 DMMFドメインイベント関数実装 ─ 個人開発者向けのサービスの開発記録

tyshgc
·

本日の作業

  • 🚴 日報・分報のcommand/event/policyのまとめ書く

    • ✅ event, policy, イベントハンドラ実装

    • 🚴 Either型をTaskEitherにする

    • 🚴 ワークフロー関数の実装

  • 日報プレゼンテーション層(Remix loader/action)との結合

  • 日報画面実装

  • サインインの実装

    • 認証画面実装

    • 認証ロジック実装(主にClient側)

    • Server側の認証チェック実装

    • Client側の認証チェック実装

  • 🛑 🚴 イベントストーミングとサービスブループリンの融合についてzennにまとめる

  • 🛑 🚴 Feature-Sliced Designについてzennにまとめる

ドメインイベント関数とドメインイベントハンドラ関数

ドメインイベント関数には、コマンド関数で入力された情報を踏まえてビジネスロジックを経て永続層とのやり取りを行うところで成功可否をEither型で返し、成功すれば変更された状態の集約が渡されます。尚、ポリシーがあればそれに準じたロジックを実行し再び必要なドメインイベント関数を実行します。ポリシーがなければ定義的にはその変更された状態の集約がEither型で返されます。

で、ドメインイベントまで実装できるとあとはどう繋げていくかその部分はイベントハンドラ関数を用意して入力→バリデーション→コマンド関数→ドメインイベント関数をpipe関数で繋げていきます。

pipe関数は上から値を下の関数に渡していくことになります。

  1. ハンドラ関数の引数でuserInputを受け取る。

  2. pipe関数にuserInputを先ずは渡す。

  3. userInputをvalidationFunctionの引数で受け取り、バリデーション処理。成功可否をEither型で返す。

  4. validationFunctionが返すEither型の情報をcommandFunctionの引数で受け取り、コマンド関数の処理(ビジネスロジックや永続層とのやり取り)。成功可否をEither型で返す。

  5. commandFunctionが返すEither型の情報をdomainEventFunctionの引数で受け取り、追加のロジック(ポリシー)があればそれを処理、なければそのまま成功可否をEither型で返す。

尚、ワークフローの中で複数のドメインイベントが続いて処理されるケースがあります。ポリシーはそのためにあり、例えばドメインイベント後に通知処理をするとかはまた別のドメインイベントとして定義・実装していきそれらをワークフロー関数として同じようにpipe関数で繋げていきます。

これで一通りの実装が完了します。ふー…。

というところまで一通りメモを残したところで、実装したコードを掲載しようと思ったんですが一つ問題が。非同期処理後にEither型を返す際はそのままEither型を取り扱うことができず、代わりに「TaskEither」にしないとダメだそうです。その辺の書き換えは明日やります…。

その他、メモ

  • ちょっとDMMFに疲れてきている。早く慣れたい。けど仕事で使う予定がないのでマジで個人開発で使い続けないと忘れそう。

  • そして連日雨で外に出れなくて気が滅入っている。

← #71 #73 →

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