Enviar pesquisa
Carregar
Are Design Patterns Dead?
•
0 gostou
•
735 visualizações
Yoshitaka Kawashima
Seguir
吉祥寺.pm32で話したスライドです。 邦題: デザインパターンは死んだ(のか)?
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 15
Baixar agora
Baixar para ler offline
Recomendados
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
Scott Wlaschin
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
Goのシンプルさについて
Goのシンプルさについて
pospome
Recomendados
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
Scott Wlaschin
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
Goのシンプルさについて
Goのシンプルさについて
pospome
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
例外設計における大罪
例外設計における大罪
Takuto Wada
目grep入門 +解説
目grep入門 +解説
murachue
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
Takuya Tejima
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
Mais conteúdo relacionado
Mais procurados
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
例外設計における大罪
例外設計における大罪
Takuto Wada
目grep入門 +解説
目grep入門 +解説
murachue
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
Takuya Tejima
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Mais procurados
(20)
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
例外設計における大罪
例外設計における大罪
目grep入門 +解説
目grep入門 +解説
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
オブジェクト指向できていますか?
オブジェクト指向できていますか?
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
メタプログラミングって何だろう
メタプログラミングって何だろう
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
プログラムを高速化する話
プログラムを高速化する話
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Mais de Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
システムダウンのひみつ
システムダウンのひみつ
Yoshitaka Kawashima
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
アンチフラジャイルの世界
アンチフラジャイルの世界
Yoshitaka Kawashima
Atomic Architecture
Atomic Architecture
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
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
Mais de Yoshitaka Kawashima
(20)
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
本番障害に至る病
本番障害に至る病
システムダウンのひみつ
システムダウンのひみつ
Mavenの真実とウソ
Mavenの真実とウソ
アンチフラジャイルの世界
アンチフラジャイルの世界
Atomic Architecture
Atomic Architecture
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
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駆動開発
Are Design Patterns Dead?
1.
Are Design Patterns
Dead? kawasima
2.
Are Design patterns
dead?
3.
What are Design
patterns 例:横断歩道 歩行路が道路を横断する地点では、たとえ歩行者に法的優先権があろうとも、車には歩行者を脅迫 し、服従させる力がある。これは歩行路と道路が同一平面上にあるとつねに生じる問題である。(中 略)横断者が道路を快適で安全と感じるのは、横断歩道が障害物になり、車がスピードを落とし、歩 行者に道を譲ることを物理的に保証される場合のみである。(中略)横断歩行路を道路より15-30cm 高くし、道路がそこに向かって盛り上がるようにすればよい。勾配が1/6以下であれば車には安全だ し、しかも確実に車はスピードダウンする。遠方から横断を見やすくし、またそこでの歩行者の権利 に重み付けをする意味でも、道路際に縁を設けて歩行路を明示することもできよう。(中略)問題の 道路に、1日数回、異なった時間に出かけてみること。その度に、何秒待てば横断できるか測るこ と。待ち時間の平均が2秒以上であれば、このパターンを適用する方がよい。(後略) http://www.s-lagoon.co.jp/pattern_use_nf.html
4.
Pattern Structure ・問題:横断歩道を造るとき、歩行者に安心感を与え、安全を守らねばならない ・フォース:2秒以上待たないと横断できないような道路 ・解決策:横断歩行路を道路より15-30cm高くし、勾配を付けて車の走行に配慮 する フォースとは… 解決しなければならない問題に対して、選択すべき解決策を 限定させるような、特定の状況の制約
5.
Pattern Structure 問題 解決策 解決策 フォース フォース 解決策 フォース 繰り返し見られる (問題, フォース,
解決策)の ペア
6.
フォースが変わると解決策も変わる
7.
Singleton 問題: あるデータが1つだけであることを保証したい フォース: 生成のタイミングは利用するアプリケーション側でコント ロールしたいが、そこで生成されるデータ自体を書き換えることはでき ない。 解決策:
Javaだとダブルチェックロッキング
8.
※Notion AIに書いてもらいました
9.
DIコンテナになると、自前で実装する必要が無くなった 依然として解きたい問題はそこにありフォースも変わらないので 多くの人はSingletonパターンとして認識する
10.
問題: あるデータが1つだけであることを保証したい フォース: 生成のタイミングは別にアプリケーションがコントロールする必 要はない 大元のフォースが変わると異なるパターンになる 解決策:
グローバル変数として作っておけば良い ○ Node.jsならexport const singleton = new Singleton() ○ JavaならClass初期化時にINSTANCE生成 この場合、ただの「グローバル変数パターン」?
11.
クラス継承前提のパターンはOOじゃなければ変容する
12.
Template Method 問題: アルゴリズムの構造を変更することなく、アルゴリズムの特定のス テップを再定義したい フォース:
サブクラス毎に再定義したいステップを実装する
13.
※Notion AIに書いてもらいました
14.
※Notion AIに書いてもらいました (関数合成はしてないですね) Template
Methodの「問題」は以前と して存在していて、フォースが「サ ブクラス」から「部分適用と関数合 成」に変わる フォースが大きく変わるとパターン 名くらいは変えていいかも…
15.
言語の発展とともに不要になった ➡ 不正確 Web開発では元々「問題」として現れにくいものもあった ➡ Flyweight,
Interpretor 言語(フレームワーク)の発展とともに自分で解決策を実装しなくても良くなっただけ ➡「生成」のパターン全般 GoFはオブジェクト指向前提なので、解決策が変わるだけ 継承によるポリモーフィズム → パターンマッチによるポリモーフィズム ➡ Object Scopeのパターン (are still alive!!) フォースまで変わると、別パターン(元のパターンは死んだと言っていいかも) ➡ Template Method まとめ
Baixar agora