ドメイン記述ミニ言語
DMMFのやつ
タイトルは/kawasima/ドメイン記述ミニ言語をパクった
メモ程度のDSLであり、正解の仕様があるわけでもないので、適当に書き下せば良かろう
何が嬉しい?
非エンジニアでも読んで理解できる
抽象レベルでコミュニケーションすることができる
この記述を元にコミュニケーションすることで、漏れている仕様や、誤っている仕様に気づきやすい
半形式的にメモれる
自然言語よりノイズが少なく、必要であれば自然言語も使える
なので、読んだ人同士で齟齬がない程度に形式的であれば十分だと思うmrsekut.icon
厳密なDSLの仕様を考える必要はない
syntaxも雑でよく、書籍ではF#風だが、使用する言語に合わせるのも良さそう
日本でやるなら日本語で書いたほうが良いと思う
コミュニケーションの邪魔になる要素は省くべき
微妙にコードに近い記述をすることで、実装時の制約を意識できるというのもあるかもしれない
例えば、Quantityの定義を書いている時に、上限を聞き忘れていたことに気付く、など
ややムズやがmrsekut.icon
書籍を読むと下記のようなことを書いている
どのBounded Contextでの話をしているか
workflow (DDD)の定義
何によってトリガーされるか
入力はなにか
途中で受ける入力なにか
出力となるEventはどういうものか
どういった副作用があるか
どういうデータ構造か
代数的データ型で書くと良い
まだ不明のところは???をつけておく
code:_
workflow "place order" =
input: OrderForm
output: ...
// step 1
do ValidateOrder
If order is invalid then:
add InvalidOrder to pile
stop
// step2
do PriceOrder
// step3
do SendAcknowledgementToCustomer
...
値のvalidation条件や単位の記述
/mrsekut-book-4048931164/049
code:_
data WigetCode = string starting with "W" then 4 difits
Lifecycleの記述
Stateによって異なる場合は、区別して表現するなど
code:_
data UnvalidatedOrder =
UnvalidateedCustomerInfo
AND UnvalidatedShippingAddress
...
不満mrsekut.icon
スケールはしなさそう
あくまでも設計の初期段階に、ほぼ書き捨ててで存在するものだと思う
規模が大きくなるとキツイ
IDEのサポートをされたい
人数が増えるとキツイ
他の人が書いたわけわからんDSLを解釈するのがきつそう
そういう意味では、ある程度仕様化されている方が良いが、そこに労力を割くのもなあという
最終的には、Type Level Domain Modeling的なことをしたい?
参考
/mrsekut-book-4048931164/044: 2.4 ドメインの文書化
/kawasima/ドメイン記述ミニ言語