ドメイン駆動設計周りに関するXの盛り上がり|2023年11月編
DDDとクリーンアーキテクチャに批判的な人の大部分は、ソフトウェアの本質はUI(機能とUIは不可分)だと思っていて、なんでもUIドリブンで作るべきで、バックエンドは可能な限り何も考えず、できれば自動生成したいと思ってる
賛同する人はソフトウェアの本質はUIに依存しない機能だと考えてる
感想)
同意。
UIが安定だと考えるならUIと機能を不可分にしたらいいんじゃないかなぁ。でも大半の場合はUIのほうが不安定なので分けたほうがいいというか。
正確には、UIのたたきを考えることでユーザー体験や提供価値に対する解像度を上げるのは良いことだと思うのだが、それを設計に反映させるのは依存方向が逆だよね的な話だと思った
DDDとかクリーンアーキテクチャは寿命を言語 > アプリ = アーキテクチャ >>> フレームワークと考えている節があって、実際にはデータ >>>> データベース >> OS > 言語 > フレームワーク >>>> アプリという世界もある。データベースに魂を込めてモデリングする、アプリはおまけという思想も根強い
感想)
同意。
まあ善悪ではないのだが、データベースが一番安定だという視点も確かにそうなので、部分的にはアプリはおまけと言われてもそれはそうかもねと思ってしまうな。
サービス全体として、データベースにどういう事実を保存するのかというところと、その事実にどういう解釈を持たせるのかの比率において、解釈の比率も大きいならドメイン駆動設計がワークするよねという話だと思う。そういうサービスに所属したことがないなら価値観が違っていて当然だと思う。
DDD とかクリーンアーキテクチャに否定的な人がいるの、原典を読んだのかすら怪しい「僕の考えた最強の DDD/クリーンアーキテクチャ」みたいな言説が溢れていて、肝心のドメインにどう向き合うのかって話はあまり表に出てこないからだと思う
感想)
本当にそう。
ドメインに向き合っている話、固有過ぎるので表に出しにくいというのはありそう。
あと、そもそも事業によって、事業自体もドメイン駆動で運営されているよねっていう場合と、事業自体が新しいドメインを提唱しているのかでちょっとDDDに対するスタンスも異なってきそうな印象がある(伝われ)。
まああと、DDDとか言う前に、利口なUIアンチパターン踏んでないの?とか、実はドメインなのにドメイン層にモデリングするの忘れてない?とかその逆もあるんじゃない?とか、そもそもデータのバリデーションしっかりやっていないじゃないとかDDD以前のベースライン上げるの大事みたいな話もあるかも。なんか直感に反するんだけど技術に向き合うより(なんちゃって)DDDに向き合うほうが気が楽みたいな現象あると思うんですよね。
DDDとかクリーンアーキテクチャとか、中途半端に理解した人の実践がいちばんたちわるい
とはいえ教えてくれる人がいない限り、誰しもがそこを経由することにはなるのですが。。。
感想)
ぴえん
DDDとかクリーンアーキテクチャとかの〜層みたいな抽象化を考えるのがソフトウェアエンジニアの一番重要な仕事なんじゃないのっていつも思う
感想)
そもそもエンジニアにしかできない仕事ってなんだっけって考えると、機能要件満たしているかどうかは誰が見てもわかるわけなので、「しかできない」って考えると非機能要件を考えることなんですよねって言うのはいつも思っている。
あとなんかこの話でいうと、DDDとかクリーンアーキテクチャとかよりさらに全体感として、いまはSPA全盛期だから従来のView層が見えにくくなっている(より解像度を上げないといけなくなっている)と思っていて、フロントエンドも踏まえた全体のレイヤーを意識する必要があるのが難易度が上がっているなって思います。
取り立ててDDDが正義とも思わないけど、この辺のアーキテクチャに関心が薄い人は、ごちゃごちゃしたビジネスロジックであまり苦労したこと無いんだろうなと思うことはある。人は自分が経験したペインを受け入れるのはできるけど、未経験のペインを受け入れるのは難しい。
感想)
こういう意見大好き。今こうやってSNS上の意見まとめておきながら言うのもなんだけど、結局人の発言なんてみんな大なり小なりポジショントークなんだからそのまま受け入れるんじゃなくて自分が関わっているサービスの特性を客観的に見て何するのが良いんだろうって考えるのが大事というか。
まあ要はあれです、モダンな技術使っている会社に入りたいというよりそれに相応したペインを構造上有しているサービスを運営している会社に入るか起業したらいいのではないかという(現時点でモダンではなくても構造上有しているペインが”良い”ペインであればいずれ問題解決する方向にインセンティブが働くはずなので)(???)。
クリーンアーキテクチャのデータベース層の設計パターンとして相性が良いのはイミュータブルデータモデリングだと思います。しかし簡単にCRUDが出来るActiveRecordパターンに設計を引きづられがち。単純なモデルならActiveRecordは良いけれど。なら何故クリーンアーキテクチャにするの?となります。
この記事最高です
あとは、複数プレゼンテーションをやったことがあるかどうかだな。
管理画面、フロントで git 管理すらわける1プレゼンテーションに 1プロジェクトという運用ならクリーンアーキテクチャさせないほうが良いと思う。
UIと分離出来ないとか言ってるのはレイヤーわけミスってると思う
感想)
本当にそう!顧客向けWebフロントしかありません、社内向け管理画面は何でもできるCRUDで別に立てていますみたいな環境と、顧客向けWebフロント、顧客向けネイティブアプリ、社内向け管理画面に分かれていますみたいな環境(さらに分かれることもあると思う)だとフロントにロジックを寄せてしまうことに対する危機感がまるで違いそう。
なんかこういう、設計議論する上であなたの経験したプロダクトの特徴はどれですかチェックリストみたいなの作りたい。それがないと意見を聞き分けるのが難しい。
あなたの経験したプロダクトの特徴はどれですかチェックリスト
1)あなたが経験したことのあるサービスの特徴はどれですか
- メディア(一般公開された一覧・詳細画面が多数ありCVすることで儲かる事業。SEO・広告大事)
- SaaS(アカウント単位などでサブスク課金されて利用できる事が多いクローズドなツール。特定業界や業務に依存)
- ツール(一部SaaSも含む。特異的な技術を売りにした、特定業務を助けるツール)
- SNS
2)あなたの経験したことのあるプロダクトにおいてフロントエンドの扱いはどれですか
- MPAでバックエンドフレームワークに密結合
- Webとアプリなど複数クライアントに同じAPIコードベースから機能を提供
- Webフロントとバックエンドが1:1
3)あなたが関わったサービスが初期リリースからアクティブにメンテナンスされたのは何年ですか
- 〜1年(立ち上げ期または受託等で納品して終わり)
- 〜3年
- 〜10年
- 10年〜(古株のサービスのメンテをしたことがある)
4)あなたが関わったサービスにおいてデータストアからのRead Performanceはどの程度重視されていましたか
- ほぼ最重要視されかつ問題が発露しがち(専用にキャッシュ機構などを実装する必要がある / Lighthouse70点以上がベースライン)
- 最重要視だが事業規模的に問題になることが少ない(N+1やインデックス貼り忘れ、過度な正規化など初歩的なミスをしなければパフォーマンスが出せる)
- ベストエフォート(速いに越したことはないが初回読み込みが多少遅くても事業KPIへのダメージが少なくそれより優先されることがたくさんある)
- リアルタイム反映かつ複雑(SNSのタイムライン実装など)
5)あなたが関わったサービスにおいてデータストアへのWrite Exactness(造語)はどの程度重視されていましたか
- 書き込みロジックが法律で決まっている
- 寸分の狂いも許されない数値計算ロジックがある
- (あくまで極論ですが)顧客が誤ってInvalidなデータを書き込んでしまっても数時間〜数日以内に戻せば良かったり、なんならCSVアップロードがサポートされていたりする