1017
LOGS
関数型ドメインモデリング
Gemini
に聞いてみる関数型ドメインモデリング(Functional Domain Modeling)とは、ソフトウェアの設計において、ドメイン(業務領域)のロジックを、副作用のない純粋な関数と不変なデータ構造を用いて表現するアプローチです。
これは、オブジェクト指向(OOP)における「手続きや状態を持つオブジェクト」を中心としたモデリングとは対照的で、プログラミングにおける関数型のパラダイムを、ドメイン層の設計に徹底して適用します。
- 概念の核となる要素
- 主要な目的は、コードから「予測不可能な要素」を排除し、ロジックの正しさを保証しやすくすること
- 不変なデータ構造(Immutable Data)
- OOP ではオブジェクトの状態(フィールドの値)が変化するが,関数型ではデータは変化しない
- 純粋な関数(Pure Functions)
- 同じ入力(引数)を与えれば、必ず同じ出力(戻り値)を返し、かつ外部に副作用(データベースへの書き込み、ログ出力、グローバル変数の変更など)を与えない関数
- 副作用の分離と型付け
- 副作用はアプリケーションから排除することはできないため、純粋なドメインロジックから厳密に分離
- 副作用を伴う処理(I/O、ネットワーク通信、データベースアクセスなど)は,
Effect(効果)
と呼ばれる特別な構造や型(例:Task
,IO
,Promise
)でカプセル化される.これにより,コードを読むだけで「この関数は副作用がある」ことが一目で分かる
- 不変なデータ構造(Immutable Data)
- 主要な目的は、コードから「予測不可能な要素」を排除し、ロジックの正しさを保証しやすくすること
- 代数的データ型による厳密なモデリング
- 関数型ドメインモデリングの大きな特徴は、TypeScript などの言語で利用できる 代数的データ型(Algebraic Data Types: ADT) を使って,ドメインの制約を型システムに組み込むこと
- 直積型(Product Types)
- 例:
type User = { name: string; age: number; }
- 例:
- 直和型(Sum Types)
- エラーや状態を厳密に表現
- 例:
type PaymentStatus = "Success" | "Failure" | "Pending";
- 直積型(Product Types)
- 特に直和型を使うことで 「あり得ない状態」 を型レベルで排除でき,コンパイラがバグを未然に防ぐ手助けをしてくれる
- この厳密な型表現こそが,関数型ドメインモデリングの中核を成していると
- 関数型ドメインモデリングの大きな特徴は、TypeScript などの言語で利用できる 代数的データ型(Algebraic Data Types: ADT) を使って,ドメインの制約を型システムに組み込むこと
- 概念の核となる要素
何となくわかったような,全然わかっていないような
関数型
の部分は腹落ちしているがドメインモデリング
の部分がわかっていないからだな
ドメインモデリング
度々登場
Gemini
君ソフトウェアが解決しようとしている現実世界の業務領域(ドメイン) を.コンピュータ上で扱えるように抽象化し、構造化すること 簡単に言えば, 「現実の業務ルールを、コードで表現するための設計図を作ること」
だそうだ
例:
オンライン書店
というドメインをモデリングする場合- ドメインの要素: 顧客、商品、注文、在庫、配送先、支払い方法
- ドメインのルール: 「在庫がない商品は注文できない」「VIP 顧客は 10%割引が適用される」「注文は必ず支払い情報と配送先情報を持つ」
ドメインモデリングの目的は,これらの要素とルールを コード上で正確かつ一貫性をもって再現できるモデル(概念) として定義すること
- なるほど.何となくわかった.具体的な手法などは別途調べるとして,言葉と概念は掴んだ気がする
データレイク
- 何度か検索したワード
- またもや
Gemini
君の説明データレイクとは、構造化データ、半構造化データ、非構造化データといったあらゆる種類のデータを、元の形式のまま一元的に保存する大規模なリポジトリです。データを保存する前に構造を定義する必要がないため、柔軟性が高く、後から必要に応じてデータを分析したり、機械学習に活用したりするのに適しています。
- ついでに AWS からの説明
データレイクは、規模にかかわらず、すべての構造化データと非構造化データを保存できる一元化されたリポジトリです。データをそのままの形で保存できるため、データを構造化しておく必要がありません。また、ダッシュボードや可視化、ビッグデータ処理、リアルタイム分析、機械学習など、さまざまなタイプの分析を実行し、的確な意思決定に役立てることができます。