「共通言語たるドメインモデルを、そのままコードと1対1対応しなければならない、という思い込みや風潮。
既存のWAF(Web Application Framework) の利点を潰してどうする…」
こういう誤った思い込みをエンジニアにさせているのは、ドメイン駆動設計の原典である「エリック・エヴァンスのドメイン駆動設計」が、いかに抽象的な内容で、ある意味では哲学的であったかを、明示するものでは無いか。
プログラムとはメタファーであり、現実を、もしくはそれに準ずる写像的な世界観を、コードに忠実に再現するものでは必ずしも無いと考える。この記事の増田は「過度な抽象化」とも書いているが、プログラムというか、そもそも言語そのものが物事の全てを表象できるものではなく、ある一側面の一イメージしか切り取れない不完全なものだし、それ自体が問題ではない。現実とソフトウェアの溝を、ユーザーとエンジニアの溝を、ドメインとソースコードの溝を、いかにして埋めるかというのが、ドメイン駆動設計の本質だし、その埋め方についてはエリックエバンスは一例を示しているに過ぎない。EntityやValueObjectなど、必要なら使えば良いし、不要なら使わなければ良いのだ。ただし、元々何が問題なのか、問題だったのかという点について、いかにして向き合うかが肝要であり、それは技術論や方法論の話ではない。
ドメイン駆動設計の記事を書いたり、勉強会で発表をしている人間は、原典やそれに付随するドキュメントの内容を、無批判に信奉し、そのようにしなければならないという強迫観念に追われているのではないか。そもそも、本当に理解しているか怪しいし、不安だから教科書の内容にしがみつこうとするのだろう。さらにこの手の連中は、昨今のCQRSやイベントソーシングやマイクロサービスなどとも絡めて話をし出すから、タチが悪い。「ドメイン駆動設計はこの手の技術スタックと相性が良い」という言葉を何度も見かけたが、技術的な方法論はそもそも無関係だったはずだし、そうやって安易に結びつけてしまうから、ユーザーが置き去りになって来たんじゃねーのと、暴言でも吐きたくなる。問題の本質はどこにあったのかを、聖典の内容や、流行り廃りの技術とは切り離して、エンジニアは三思九思すべきだ。
別にこうあらなければならないという法律や決まりは無いし、好きにやれば良い。モデルと1対1にならなければ、分割する事を選択するのも一つの向き合い方だ。ドメイン駆動設計の信者ににゃんにゃん写真でも撮られて、ばら撒くと脅迫されているのであれば勿論話は別だ。恥ずかしい写真を魚拓されたくなければ、とりあえずEntity、ValueObject、Repository、Service(笑)位は最低限、用意するのが身のためだろう。
自分の頭で考えて、自分の責任で判断するという当たり前の事に立ち返りたいものだ。ドメイン駆動設計という盲目的な宗教からいかにして抜け出すかが今後のエンジニアの課題だろう。
追伸
※追記あり。最後の追記は 2021/04/25 21:40頃※ タイトルの通りのことを思っているけど、顕名のブログで書くと社内で干されるので、増田に書く。社内の心理的安全性がそんなに低い訳で...
「共通言語たるドメインモデルを、そのままコードと1対1対応しなければならない、という思い込みや風潮。 既存のWAF(Web Application Framework) の利点を潰してどうする…」 こういう誤った...
おおむね同意する。 大事なのはDDDを実践しようとした場合のビジネスサイドとの協調という心構えなのであってフレームワークとしてとらえるとただ面倒くさいだけの手法だと思う。 SOL...
極端な表現をすれば、馬鹿の一つ覚えで終わる話だと思う
言おうとしていることはわかる。言語仕様にもよるが、例えばGoで適用してDDDの概念がそのままディレクトリー名になるとか、まじでありえない
どうして増田にはIT関連企業の人がいないの?
日本のアホだけど偉い人名言に加えておけ ?「よし、AIだ」 ?「よし、ディープラーニングだ」 ?「よし、ブロックチェーンだ」 ?「よし、DXだ」 ?「よし、マイクロサービスだ」 ?...
わかってない。ドメインはWAFの外側なんだよ。 あとWAFってWeb Application Firewallじゃないの普通
Wikipedia読んでもドメイン駆動設計がどういうことなんかさっぱりわからんやで この前ホッテントリに入ってたオブジェクト指向の増田みたいにわかりやすく解説してくれやで
っていうかドメイン駆動設計ってクライアントアプリとかやってる人なら意識せずに普通にやってることじゃないの? webアプリだからフレームワークに沿わずに特別なことにみえるだけ...
以下はあくまで個人の解釈だから異論は認める ドメイン駆動設計ってあくまで設計手法っていうかビジネスロジックのモデリングまでが本分だから システムドメイン(領域)にビジネス...