Movatterモバイル変換


[0]ホーム

URL:


3,305 views

Tackling Complexity

設計ナイト2022 「トランザクションスクリプト」でのディスカッション枠スライドです。

Embed presentation

Tackling Complexitykawasima設計ナイト 2022
ドメインモデルは「複雑さ」に対応するものである複雑シンプルTheoremファウラーのあやまち

ドメインモデルパターンを「An object model of the domain thatincorporates both behavior and data」って定義しちゃっているため、オブジェクト指向パラダイムに縛られている。
では「複雑さ」とは何なのか?Simple Made Easyhttps://github.com/tallesl/Rich-Hickey-fanclub
シンプルの反対の意味である「複雑」とは…?1つの塊に複数のものが混在している状態● 複数の役割● 複数のタスク● 複数の概念● 複数の次元構造の複雑さ(凝集度に関連)
「複雑」は別の意味で用いられることもあるパーツの数が多く、それらが関連していることNetflixのMicroservices構成
2種類の「複雑さ」構造の複雑さ● 分解可能○ 分解するとパーツが増え、関係性の複雑さが増す● 凝集度の話○ データにもfunctionにも存在する関係性の複雑さ● 業務を変えない限りは、不可避● サブドメイン分割など、分割統治で立ち向かう● 構造の複雑さと解消しないと、見えにくいOut of the tar pit だとAccidental Complexity Essential Complexity
Kent BeckのSimple Design1. 全てのテストがパスする (Passes the tests)2. 意図が明確である (Reveals intention)3. 重複がない (No duplication)4. 最小の構成要素 (Fewest elements)https://martinfowler.com/bliki/BeckDesignRules.htmlこれは「関係性の複雑さ」についての言及今必要ないものを作り込んで、設計要素を増やすな (YAGNI)
ドメインモデルというからには構造の「複雑さ」を解消してなくてはならない
00年代によく見られたドメイン層の実装
実態として、構造の複雑さが解消されていない
「あちこちで料金計算していたロジックを、料金のクラスにまとめました。」\\高凝集// \\ドメインモデル//ってなりかねない…ドメインモデリングでは「構造の複雑さ」をどう減らすか、もっとフォーカスされなくてはならない\\脱トランザクションスクリプト//
構造の「複雑さ」を別のレイヤに押し込めることじゃなくhttps://github.com/kawasima/kata
構造の複雑さをシンプルに
渡辺幸三さんの「データモデリング入門」よりここでは「複雑さ」に構造と関係性両方を含んでの話だが、上の図は構造の複雑さを含んだデータモデルは、処理系の構造も複雑にしてしまう、ことを表している
データとプロセスの複雑さの関係
Wrap up● 「複雑さ」は2種類あるので、分けて考えよう● 「構造の複雑さ」はSimple Made Easy - wayで分解する● 「関係性の複雑さ」は「構造の複雑さ」を解消しないと見えにくい● 「複雑さ」に対処するのが、ドメインロジックのパターンの本質○ なんだけど、パターンそのものは、構造の複雑さ解消の土台を作っているだけに過ぎない○ 地道に構造の複雑さを解消していかない限りは「複雑さ」が移動しているだけになる
参考文献● Scott Wlaschin “”Reinventing the Transaction Script● Scott Wlaschin “Domain Modeling Made Functional”● Rich Hickey “Simple Made Easy”● 渡辺幸三 “データモデリング入門”● Eric Normand “Grokking Simplicity”● kawasima “https://scrapbox.io/kawasima/ドメインモデル貧血症”● kawasima “https://scrapbox.io/kawasima/イミュータブルデータモデル”

Recommended

PDF
ソフトウェアにおける 複雑さとは何なのか?
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
なぜデータモデリングが重要なのか?
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
それはYAGNIか? それとも思考停止か?
PDF
イミュータブルデータモデルの極意
PDF
イミュータブルデータモデル(世代編)
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
オブジェクト指向エクササイズのススメ
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
ドメイン駆動設計 本格入門
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
PDF
こわくない Git
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
オブジェクト指向できていますか?
PPTX
オーバーエンジニアリングって何? #devsumi #devsumiA
PPTX
世界一わかりやすいClean Architecture
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメイン駆動設計 失敗したことと成功したこと
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
私にとってのテスト
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PPTX
GraphQLのsubscriptionで出来ること
PDF
Are Design Patterns Dead?
PDF
アンチフラジャイルの世界

More Related Content

PDF
ソフトウェアにおける 複雑さとは何なのか?
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
なぜデータモデリングが重要なのか?
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
それはYAGNIか? それとも思考停止か?
PDF
イミュータブルデータモデルの極意
PDF
イミュータブルデータモデル(世代編)
ソフトウェアにおける 複雑さとは何なのか?
強いて言えば「集約どう実装するのかな、を考える」な話
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
なぜデータモデリングが重要なのか?
ソフトウェア設計における 意思決定とそのレビューの秘訣
それはYAGNIか? それとも思考停止か?
イミュータブルデータモデルの極意
イミュータブルデータモデル(世代編)

What's hot

PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
オブジェクト指向エクササイズのススメ
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
ドメイン駆動設計 本格入門
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
PDF
こわくない Git
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
オブジェクト指向できていますか?
PPTX
オーバーエンジニアリングって何? #devsumi #devsumiA
PPTX
世界一わかりやすいClean Architecture
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメイン駆動設計 失敗したことと成功したこと
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
私にとってのテスト
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PPTX
GraphQLのsubscriptionで出来ること
ドメイン駆動設計 ( DDD ) をやってみよう
オブジェクト指向エクササイズのススメ
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ドメイン駆動設計 本格入門
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
こわくない Git
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
オブジェクト指向できていますか?
オーバーエンジニアリングって何? #devsumi #devsumiA
世界一わかりやすいClean Architecture
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計 失敗したことと成功したこと
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
オブジェクト指向プログラミングのためのモデリング入門
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
Dockerfileを改善するためのBest Practice 2019年版
私にとってのテスト
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
GraphQLのsubscriptionで出来ること

More from Yoshitaka Kawashima

PDF
Are Design Patterns Dead?
PDF
アンチフラジャイルの世界
PDF
Grokking Simplicity探訪
PDF
ソフトウェア開発における『知の高速道路』
PDF
ブルックスのいう銀の弾丸とは何か?
PDF
システムダウンのひみつ
PDF
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
PDF
ウォーターフォールとアジャイルのフェアな比較
PDF
Mavenの真実とウソ
PDF
Atomic Architecture
PDF
たとえ日本人同士でも必要な異文化理解力
PDF
Antifragile Java - Java Day Tokyo 2017 D1-E1
PDF
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
PDF
Boilerplate vs Magic
PDF
Antifragile Clojure
PDF
本番障害に至る病
PDF
既婚プログラマの時間捻出術
PDF
SIerにとっての越境 @ DevLOVE 199
PDF
週刊Webサイトのアーキテクチャ
PDF
How to find tech books
Are Design Patterns Dead?
アンチフラジャイルの世界
Grokking Simplicity探訪
ソフトウェア開発における『知の高速道路』
ブルックスのいう銀の弾丸とは何か?
システムダウンのひみつ
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
ウォーターフォールとアジャイルのフェアな比較
Mavenの真実とウソ
Atomic Architecture
たとえ日本人同士でも必要な異文化理解力
Antifragile Java - Java Day Tokyo 2017 D1-E1
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Boilerplate vs Magic
Antifragile Clojure
本番障害に至る病
既婚プログラマの時間捻出術
SIerにとっての越境 @ DevLOVE 199
週刊Webサイトのアーキテクチャ
How to find tech books

Tackling Complexity


[8]ページ先頭

©2009-2025 Movatter.jp