1017

LOGS

  • 関数型ドメインモデリング

    • Gemini に聞いてみる

      関数型ドメインモデリング(Functional Domain Modeling)とは、ソフトウェアの設計において、ドメイン(業務領域)のロジックを、副作用のない純粋な関数と不変なデータ構造を用いて表現するアプローチです。

      これは、オブジェクト指向(OOP)における「手続きや状態を持つオブジェクト」を中心としたモデリングとは対照的で、プログラミングにおける関数型のパラダイムを、ドメイン層の設計に徹底して適用します。

      • 概念の核となる要素
        • 主要な目的は、コードから「予測不可能な要素」を排除し、ロジックの正しさを保証しやすくすること
          1. 不変なデータ構造(Immutable Data)
            • OOP ではオブジェクトの状態(フィールドの値)が変化するが,関数型ではデータは変化しない
          2. 純粋な関数(Pure Functions)
            • 同じ入力(引数)を与えれば、必ず同じ出力(戻り値)を返し、かつ外部に副作用(データベースへの書き込み、ログ出力、グローバル変数の変更など)を与えない関数
          3. 副作用の分離と型付け
            • 副作用はアプリケーションから排除することはできないため、純粋なドメインロジックから厳密に分離
            • 副作用を伴う処理(I/O、ネットワーク通信、データベースアクセスなど)は, Effect(効果)と呼ばれる特別な構造や型(例: Task, IO, Promise)でカプセル化される.これにより,コードを読むだけで「この関数は副作用がある」ことが一目で分かる
      • 代数的データ型による厳密なモデリング
        • 関数型ドメインモデリングの大きな特徴は、TypeScript などの言語で利用できる 代数的データ型(Algebraic Data Types: ADT) を使って,ドメインの制約を型システムに組み込むこと
          1. 直積型(Product Types)
            • 例: type User = { name: string; age: number; }
          2. 直和型(Sum Types)
            • エラーや状態を厳密に表現
            • 例: type PaymentStatus = "Success" | "Failure" | "Pending";
        • 特に直和型を使うことで 「あり得ない状態」 を型レベルで排除でき,コンパイラがバグを未然に防ぐ手助けをしてくれる
        • この厳密な型表現こそが,関数型ドメインモデリングの中核を成していると
    • 何となくわかったような,全然わかっていないような

    • 関数型 の部分は腹落ちしているが ドメインモデリング の部分がわかっていないからだな
  • ドメインモデリング

    • 度々登場 Gemini

      ソフトウェアが解決しようとしている現実世界の業務領域(ドメイン) を.コンピュータ上で扱えるように抽象化し、構造化すること 簡単に言えば, 「現実の業務ルールを、コードで表現するための設計図を作ること」

    • だそうだ

    • 例: オンライン書店 というドメインをモデリングする場合

      • ドメインの要素: 顧客、商品、注文、在庫、配送先、支払い方法
      • ドメインのルール: 「在庫がない商品は注文できない」「VIP 顧客は 10%割引が適用される」「注文は必ず支払い情報と配送先情報を持つ」
    • ドメインモデリングの目的は,これらの要素とルールを コード上で正確かつ一貫性をもって再現できるモデル(概念) として定義すること

    • なるほど.何となくわかった.具体的な手法などは別途調べるとして,言葉と概念は掴んだ気がする
  • データレイク

    • 何度か検索したワード
    • またもや Gemini 君の説明

      データレイクとは、構造化データ、半構造化データ、非構造化データといったあらゆる種類のデータを、元の形式のまま一元的に保存する大規模なリポジトリです。データを保存する前に構造を定義する必要がないため、柔軟性が高く、後から必要に応じてデータを分析したり、機械学習に活用したりするのに適しています。

    • ついでに AWS からの説明

      データレイクは、規模にかかわらず、すべての構造化データと非構造化データを保存できる一元化されたリポジトリです。データをそのままの形で保存できるため、データを構造化しておく必要がありません。また、ダッシュボードや可視化、ビッグデータ処理、リアルタイム分析、機械学習など、さまざまなタイプの分析を実行し、的確な意思決定に役立てることができます。

results matching ""

    No results matching ""