2021-04-26

anond:20210425022947

共通言語たるドメインモデルを、そのままコードと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アプリだからフレームワークに沿わずに特別なことにみえるだけ...

    • 以下はあくまで個人の解釈だから異論は認める ドメイン駆動設計ってあくまで設計手法っていうかビジネスロジックのモデリングまでが本分だから システムドメイン(領域)にビジネス...

    • RailsやLaravelみたいな(Web)MVCフレームワークで開発する場合、無理にDDD文脈のアーキテクチャ(レイヤードアーキテクチャ/クリーンアーキテクチャ/オニオンアーキテクチャ)を採用すべきで...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん