Suche senden
Hochladen
Tackling Complexity
•
6 gefällt mir
•
2,907 views
Yoshitaka Kawashima
Folgen
設計ナイト2022 「トランザクションスクリプト」でのディスカッション枠スライドです。
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 16
Empfohlen
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
Empfohlen
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
例外設計における大罪
例外設計における大罪
Takuto Wada
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
Are Design Patterns Dead?
Are Design Patterns Dead?
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
Weitere ähnliche Inhalte
Was ist angesagt?
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
例外設計における大罪
例外設計における大罪
Takuto Wada
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
Was ist angesagt?
(20)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
例外設計における大罪
例外設計における大罪
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
オブジェクト指向できていますか?
オブジェクト指向できていますか?
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Pythonによる黒魔術入門
Pythonによる黒魔術入門
PostgreSQLアンチパターン
PostgreSQLアンチパターン
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
Mehr von Yoshitaka Kawashima
Are Design Patterns Dead?
Are Design Patterns Dead?
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
システムダウンのひみつ
システムダウンのひみつ
Yoshitaka Kawashima
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
アンチフラジャイルの世界
アンチフラジャイルの世界
Yoshitaka Kawashima
Atomic Architecture
Atomic Architecture
Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
How to find tech books
How to find tech books
Yoshitaka Kawashima
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
Antifragile Clojure
Antifragile Clojure
Yoshitaka Kawashima
Boilerplate vs Magic
Boilerplate vs Magic
Yoshitaka Kawashima
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
Yoshitaka Kawashima
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
週刊Webサイトのアーキテクチャ
週刊Webサイトのアーキテクチャ
Yoshitaka Kawashima
キメるClojure
キメるClojure
Yoshitaka Kawashima
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
Yoshitaka Kawashima
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
Mehr von Yoshitaka Kawashima
(20)
Are Design Patterns Dead?
Are Design Patterns Dead?
本番障害に至る病
本番障害に至る病
システムダウンのひみつ
システムダウンのひみつ
Mavenの真実とウソ
Mavenの真実とウソ
アンチフラジャイルの世界
アンチフラジャイルの世界
Atomic Architecture
Atomic Architecture
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
How to find tech books
How to find tech books
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Antifragile Clojure
Antifragile Clojure
Boilerplate vs Magic
Boilerplate vs Magic
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
週刊Webサイトのアーキテクチャ
週刊Webサイトのアーキテクチャ
キメるClojure
キメるClojure
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Tackling Complexity
1.
Tackling Complexity kawasima 設計ナイト 2022
2.
ドメインモデルは「複雑さ」に対応するものである 複雑 シンプル Theorem ファウラーのあやまち ドメインモデルパターンを「An object model
of the domain that incorporates both behavior and data」って定義しちゃっているため、オブ ジェクト指向パラダイムに縛られている。
3.
では「複雑さ」とは何なのか? Simple Made Easy https://github.com/tallesl/Rich-Hickey-fanclub
4.
シンプルの反対の意味である「複雑」とは…? 1つの塊に複数のものが混在している状態 ● 複数の役割 ● 複数のタスク ●
複数の概念 ● 複数の次元 構造の複雑さ (凝集度に関連)
5.
「複雑」は別の意味で用いられることもある パーツの数が多く、それらが関連していること NetflixのMicroservices構成
6.
2種類の「複雑さ」 構造の複雑さ ● 分解可能 ○ 分解するとパーツが増え、関 係性の複雑さが増す ●
凝集度の話 ○ データにもfunctionにも存在す る 関係性の複雑さ ● 業務を変えない限りは、不可避 ● サブドメイン分割など、分割統治で 立ち向かう ● 構造の複雑さと解消しないと、見え にくい Out of the tar pit だと Accidental Complexity Essential Complexity
7.
Kent BeckのSimple Design 1.
全てのテストがパスする (Passes the tests) 2. 意図が明確である (Reveals intention) 3. 重複がない (No duplication) 4. 最小の構成要素 (Fewest elements) https://martinfowler.com/bliki/BeckDesignRules.html これは「関係性の複雑さ」についての言及 今必要ないものを作り込んで、設計要素を増やすな (YAGNI)
8.
ドメインモデルというからには 構造の「複雑さ」を解消してなくてはならない
9.
00年代によく見られたドメイン層の実装
10.
実態として、構造の複雑さが解消されていない
11.
「あちこちで料金計算していたロジックを、料金の クラスにまとめました。」 \\高凝集// \\ドメインモデル// ってなりかねない… ドメインモデリングでは「構造の複雑さ」をどう減らすか、 もっとフォーカスされなくてはならない \\脱トランザクションスクリプト//
12.
構造の「複雑さ」を別のレイヤ に押し込めることじゃなく https://github.com/kawasima/kata
13.
構造の複雑さをシンプルに
14.
渡辺幸三さんの「データモデリング入門」より ここでは「複雑さ」に構造と関係性両方を含んで の話だが、上の図は構造の複雑さを含んだ データモデルは、処理系の構造も複雑にしてし まう、ことを表している データとプロセスの複雑さの関係
15.
Wrap up ● 「複雑さ」は2種類あるので、分けて考えよう ●
「構造の複雑さ」はSimple Made Easy - wayで分解する ● 「関係性の複雑さ」は「構造の複雑さ」を解消しないと見えにくい ● 「複雑さ」に対処するのが、ドメインロジックのパターンの本質 ○ なんだけど、パターンそのものは、構造の複雑さ解消の土台を作っているだけに過ぎない ○ 地道に構造の複雑さを解消していかない限りは「複雑さ」が移動しているだけになる
16.
参考文献 ● 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/イミュータブルデータモデル”