Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計 基本を理解する
増田 亨
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
RDRA DDD Agile
増田 亨
毎日が越境だ!
増田 亨
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
1
of
65
Top clipped slide
世界最強のソフトウェアアーキテクト
Mar. 2, 2015
•
0 likes
151 likes
×
Be the first to like this
Show More
•
30,424 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
2015/01に行った社内勉強会の発表資料です。
Yahoo!デベロッパーネットワーク
Follow
Public Relations
Advertisement
Advertisement
Advertisement
Recommended
開発速度が速い #とは(LayerX社内資料)
mosa siru
58K views
•
18 slides
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
10.5K views
•
31 slides
世界一わかりやすいClean Architecture
Atsushi Nakamura
45.3K views
•
77 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
143.2K views
•
45 slides
シリコンバレーの「何が」凄いのか
Atsushi Nakada
182.8K views
•
77 slides
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
22.4K views
•
40 slides
More Related Content
Slideshows for you
(20)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
•
70K views
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
100.5K views
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
•
8.6K views
ドメイン駆動設計 基本を理解する
増田 亨
•
117K views
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
•
8.3K views
RDRA DDD Agile
増田 亨
•
6.2K views
毎日が越境だ!
増田 亨
•
10.5K views
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
•
170.4K views
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
•
29.6K views
マイクロにしすぎた結果がこれだよ!
mosa siru
•
131.4K views
ユーザーインタビューするときは、どうやらゾンビのおでましさ
Yoshiki Hayama
•
8K views
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
•
28.4K views
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
•
95.4K views
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
•
48.9K views
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
•
15.2K views
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
•
20.4K views
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
Atsuo AOKI
•
23.9K views
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
•
59.6K views
TLS, HTTP/2演習
shigeki_ohtsu
•
12.8K views
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
•
18.5K views
Viewers also liked
(20)
株式会社インタースペース 沖本様 登壇資料
leverages_event
•
1.7K views
わんくま名古屋 #32 (20140823) TDD道場 #20
Yasuhiko Yamamoto
•
1.1K views
20120327 phpstudy58-phake
Katsuhiro Ogawa
•
2.1K views
自動化テスト VS 手動テスト
Ryutaro YOSHIBA
•
5.3K views
デザイン思考マスタークラス 2015年5月30・31日
(旧アカウント)一般社団法人デザイン思考研究所
•
7.8K views
情シス必要論
Mitsuhiro Yamashita
•
4.1K views
オブジェクト指向アンチパターンを考えてみた
Takuya Kawabe
•
6.5K views
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
Hiroyuki Yamaoka
•
9.7K views
【cybozu conference 2015】nomizu 分科会
Katsuya Nomizu
•
2.2K views
20141116 jjug ccc_2014_keynote1_public
Yoshiharu Hashimoto
•
5.1K views
脆弱性もバグ、だからテストしよう DevSummiFukuoka
ichikaway
•
2.4K views
大企業Hacks!
Ryosuke Otsuya
•
11.8K views
飲食店サイトのスクレイピング
だいすけ ふるかわ
•
2.5K views
AWSアカウント開設からインスタンスを立ち上げるまでの作業自動化について
知教 本間
•
2.4K views
スキニーなシステム開発にぴったりの契約形態
Eiwa System Management, Inc.
•
1.1K views
地方で集うビジネスにしないITラボ
Takeshi Yanagiya
•
13K views
ホラクラシー型組織~実際に8年経営してわかったこと~(ホラクラシーのメカニズム)
Kozo Takei
•
38.7K views
これからの「アジャイル」の話をしよう ――今を生き延びるための開発手法とスキル (関西バージョン)
Fumihiko Kinoshita
•
1.9K views
足を地に着け落ち着いて考える
Ryuji Tamagawa
•
5.2K views
デザイナーでも構築できる多言語/マルチデバイス対応サイト
Atushi Sugiyama
•
2.5K views
Advertisement
Similar to 世界最強のソフトウェアアーキテクト
(20)
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
Hironori Washizaki
•
799 views
Intalio japan special cloud workshop
Daisuke Sugai
•
720 views
OSC2018 hiroshima session slide by OSSC
Daisuke Nishino
•
46K views
Modeling in the Agile Age and casual astah models
Kenji Hiranabe
•
1.2K views
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Naoyuki Yamada
•
5.2K views
Devlove2012 どうしたら良いシステムが作れるのか
Yusuke Suzuki
•
7.3K views
基盤の改善から既存アプリケーションの改善
T.R. Nishi
•
1.5K views
機械学習応用のためのソフトウェアエンジニアリングパターン
HironoriTAKEUCHI1
•
3.5K views
オブジェクト指向設計の原則
Toru Koido
•
5.6K views
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
HironoriTAKEUCHI1
•
2.2K views
Ldd13 present
Masashi Kayahara
•
224 views
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
•
8.5K views
IA Workshop, Introduction to Information Architecture (2002)
Nobuya Sato
•
1.5K views
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
Yusuke Suzuki
•
24.7K views
メンバーズグループ アジャイル開発への取り組み
Hiroshi Tsukamoto
•
785 views
Wg for ai_dev_ops_20180713
Yutaka Terasawa
•
232 views
Io t,ai時代のソフトウェア
Toshiaki Kurokawa
•
213 views
Semat - a Japanese introduction
Kenji Hiranabe
•
562 views
30分で分かる!OSの作り方 ver.2
uchan_nos
•
4.7K views
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
Daisuke Nishino
•
4.3K views
More from Yahoo!デベロッパーネットワーク
(20)
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
•
12K views
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
•
3.4K views
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
•
1.2K views
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
•
1.8K views
LakeTahoe
Yahoo!デベロッパーネットワーク
•
1.5K views
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
•
1.5K views
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
•
5.7K views
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
•
7.3K views
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
•
2.2K views
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
•
1.8K views
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
•
2K views
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
•
2.3K views
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
•
1.9K views
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
•
2.1K views
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
•
2K views
Advertisement
Recently uploaded
(20)
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
22 views
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
Kazumi IWANAGA
•
6 views
Forguncy8 製品概要 202305.pptx
フォーガンシー
•
57 views
統計学の攻略_統計的仮説検定の9パターン.pdf
akipii Oga
•
271 views
【DL輪読会】大量API・ツールの扱いに特化したLLM
Deep Learning JP
•
138 views
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
192 views
量子論.pdf
hiro150493
•
9 views
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
10 views
ChatGPT触ってみた
infinite_loop
•
64 views
JSAI2023_企画セッション(仕掛学)資料
Matsushita Laboratory
•
27 views
DrupalをDockerで起動してみる
iPride Co., Ltd.
•
22 views
SoftwareControl.pdf
ssusercd9928
•
7 views
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
9 views
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
245 views
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.
•
25 views
MC-800DMT intrusion detector manual
Vedard Security Alarm System Store
•
3 views
Transformerについて解説!!
Yosuke Horio
•
4 views
《杨百翰大学毕业证|学位证书校内仿真版本》
d520dasw12
•
2 views
Voyager: An Open-Ended Embodied Agent with Large Language Models
harmonylab
•
20 views
GitHub最新情報キャッチアップ 2023年6月
Kazumi IWANAGA
•
0 views
世界最強のソフトウェアアーキテクト
世界最強の ソフトウェアアーキテクト 小川 雄大 1
小川 雄大 (おがわ かつひろ) ソーシャルマーケティング開発部 著書 パーフェクトPHP 効率的なWebアプリケーションの作り方 2 アシアル
(2008) - クロコス(2011) - ヤフー(2014)
– ソフトウェアアーキテクチャ -
Wikipedia “ソフトウェアアーキテクチャ(Software Architecture)は、ソフトウェアコンポーネント、 それらの外部特性、またそれらの相互関係から構 成される。” 3
– IEEE 1471
- Wikipedia “アーキテクト(仕組士): システムのアーキテクチャを設計する責任がある、 人、チーム、あるいは組織” 4
対象者 • コードの質を高めたいと思っている人 • 設計に興味を持っている人 •
設計がうまくいかず悩んでいる人 • 効率的にコードを書きたいと思っている人 • 開発現場に秩序をもたらしたい人 5
ゴール • 自分やチームメンバーが書いたコードを よりよくしたい気持ちになる • 設計における考え方の指針を得る 6
アジェンダ 1. 技術的負債 2. メンタルモデルとオブジェクト指向設計 3.
設計原則とパターン 4. アーキテクトのメンタル 7
技術的負債 8
– ニール・フォード (ソフトウェアアーキテクトが知るべき97のこと) “本質的な複雑さは単純に、 付随的な複雑さは取り除け” 9
技術的負債の例 10
重複だらけのコード • 修正したと思ったら修正漏れがあった… 11
理解しづらいコード • 変更したい箇所で何やってるかわからなくて どう変えていいかわからない… • どこを変えればいいかすらわからない… •
機能追加したら思わぬバグがでた… 12
拡張性のないコード • 修正したいけどあれもこれも直さなきゃ… • 1箇所変更したいだけなのにここをいじると 影響範囲が広すぎて直したくない… 13
古くなったライブラリ • サポート期限きれた… • 使いたい機能が使えない… •
放置しすぎてもはやバージョンアップ できない… 14
もうヤダこのシステム... 15 こんなことを繰り返していると となってしまいます
技術的負債を駆逐する • コードを書く以上は発生し続ける負債 • 負債を完全になくすのは不可能 •
コードを破棄するほかない 16
技術的負債を駆逐する • 新たにコードが発生する際に負債に なりにくいよう設計する • 時が経ち古くなったコードを継続的に 改修していく •
設計の知識、テクニック、経験が要求される 17
組織として取り組んでいく • 企業・チームで開発をする以上、 個人だけの問題ではない • 規約やガイドラインを制定して ルール・知見を共有し秩序をもたらす •
コードレビューを実施して品質向上と共に チーム全体の技術向上を図る 18
技術的負債ではなく 技術的資産を 19
技術的資産 • ライブラリ・フレームワーク化 • 統一・洗練された思想やインターフェイス •
整理されたドキュメント • それらをオープンソース化して 業界のイニシアチブをとる 20
メンタルモデルと オブジェクト指向設計 21
– メンタルモデル -
Wikipedia “メンタルモデル(英: mental model)とは、 人間が実世界で何かがどのように作用するかを 思考する際のプロセスを表現したものである。” 22
メンタルモデル • 思考のプロセスを表現したもの • 利用者がどのように考えてシステムを 利用するか •
プロダクトオーナーがどのような仕様に したいと考えているか • 開発者の抱く実装イメージ 23
メンタルモデルをコードで表現する • ショッピングカートの例 A. $_SESSION[‘cart’][$item->getId()]+=$num; B.
$cart->addItem($item, $num); • 剥き出しの実装にインターフェイスを被せる • オブジェクト指向プログラミングの本質 • 具体的な実装はカプセル化 24
ユースケースとインターフェイス • ユースケースを洗い出し、 それを扱うインターフェイスを定義する • ここでいうインターフェイスは言語機能の ことではなく、より広義の意味 25
ショッピングカートのユースケース • ユースケース • カートに商品を追加できる •
カートに商品を追加する際に個数を指定できる • インターフェイス • class Cart • public function addItem(Item $item, $num) 26
Facebook PHP SDK •
$fb = new Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', ]); • $response = $fb->get('/me', '{token}'); • $me = $response->getGraphUser(); • echo $me->getName(); 27
– Trygve Reenskaug (The
DCI Architecture: A New Vision of Object-Oriented Programming) “MVC is about people and their mental models —not the Observer pattern” 28
チームにおける認識の共有 • 仕様についてチーム内で話し合うときに、 固有名詞やその意味を共通化する • ユーザー?アカウント?利用者? •
ユビキタス言語 • “共有されたチームの言語” 29
– エリック・エヴァンスのドメイン駆動設計 第2章 コミュニケーションと言語の使い方 “チーム内のすべてのコミュニケーションとコード において、その言語を厳密に用いることを、チー ムに約束させること。図やドキュメント、そして 何より会話の中では同一の言語を使用すること。” 30
本質的な複雑さは単純に • メンタルモデルに沿って設計を進めることで インターフェイスが洗練される • コードが理解しやすくなり、修正や拡張も 行いやすくなる •
シンプルに、文章のようなコーディングを 31
難しいところ • 実現するためにはオブジェクト指向設計の ノウハウや経験が求められる • メンタルモデルを的確に捉え、コード上に 表現しつつ、複雑な実装の裏側はカプセル化 する、ということは簡単なことではない •
シンプルがゆえに「これが普通」だと捉えら れるかも 32
設計原則とパターン 33
設計の原則/パターン • 原則やパターンは開発における基礎知識 • 原則は負債を生み出しにくくするために •
パターンは負債を取り除くために 34
パターンの乱用による弊害 • ただし乱用すると却って複雑に • “本質的な複雑さは単純に、 付随的な複雑さは取り除け” •
常に本質的な問題の解決を意識し優先する 35
パターン 36
パターンとは • 設計ノウハウに名称をつけて共有されたもの • 「こういった問題に対してはこのパターンを 適応することで解決できる」 •
たくさんあるので詳細は省略 37
GoF • デザインパターン集 • State/Strategyパターンはオブジェクト指向 における基本的なテクニック 38
DDD • ドメイン駆動設計 (Domain
Driven Design) • 本質的な問題解決をするためのパターン集 39
エリック・エヴァンスのドメイン駆動設計 • DDD 40
PofEAA • エンタープライズアプリケーション アーキテクチャパターン (Patterns of
Enterprise Application Architecture) • アーキテクチャパターン集 41
エンタープライズアプリケーション アーキテクチャパターン • PofEAA 42
リファクタリング • リファクタリングを 行う手順に関する パターン集 43
リーダブルコード • 読みやすいコードを 書くためパターン集 44
DCI • Data Context
Interaction • データ、コンテキスト、相互作用 • MVCのようにメンタルモデルを表現する手法 • MVCの考案者らによる提案 45
さまざまな役割 • Controller • Entity •
Repository • Service • Usecase • Api 46
原則 47
原則 • こういうことしたら問題になりやすいから やっちゃだめだよという知見 48
DRY • Don’t Repeat
Yourself • 重複してはならない 49
SOLID • オブジェクト指向設計の5つ原則の頭文字 • 単一責任の原則 (SRP
: Single Responsibility Principle) • オープン・クローズドの原則 (OCP : Open Closed Principle) • リスコフの置換原則 (LSP : Liscov Substitution Principle) • インターフェイス分離の原則 (ISP : Interface Segregation Principle) • 依存性逆転の原則 (DIP : Dependency Inversion Principle) 50
単一責任の原則 (SRP) • "クラスを変更する理由は1つでなければ ならない" •
クラスの責任は1つにして複雑化などを防ぐ 51
オープン・クローズドの原則 (OCP) • "拡張に対して開いていて、修正に対して 閉じていなければならない" •
既存のコードに手を入れることなく 修正・拡張できるようにする 52
リスコフの置換原則 (LIP) • "派生型は基本型と置き換え可能でなければ ならない" •
継承によって親クラスの実装を全く別のもの に変えてしまうのは間違った継承である 53
インターフェイス分離の原則 (ISP) • "クライアントに、クライアントが利用しない メソッドへの依存を強制してはならない" •
利用するクライアントの視点から インターフェイスを定義しよう 54
依存関係逆転の原則 (DIP) • "上位モジュールは下位モジュールに依存してはな らない。どちらも「抽象」に依存するべきである" •
"「抽象」は実装の詳細に依存してはならない。 実装の詳細が「抽象」に依存すべきである。" • 実装からインターフェイスを抜き出すのではな く、要求に応じてインターフェイスを定義し、イ ンターフェイスにあわせて実装する 55
アジャイルソフトウェア開発の奥義 • SOLID原則 56
効率的なWebアプリケーションの作り方 • オブジェクト指向や 設計ノウハウなどを 体系的に学べる 57
YAGNI • You Ain't
Gonna Need It! • 実際に必要になるまで機能追加しない • “本質的な複雑さは単純に、 付随的な複雑さは取り除け” 58
アーキテクトのメンタル 59
経験は必要不可欠 • 失敗を恐れずに、「やってはいけないこと」 を身をもって覚える • 書いたコードを振り返り、よりよくなるには どうしたらようかを考える •
そうして経験値として積み重ねたものが アーキテクトの支えになる 60
コードの資産価値を高める • 再利用可能なコードを探しては抜き出し、 ライブラリ化して共有する • コードをオープンにして利用者を増やし、 コードの成長を促す 61
先人の知恵から学ぶ • 本やドキュメントを読み、原則・パターン化 された知恵を身につけていく • 先人と同じ過ちを繰り返さない •
知識の継承 62
責任を持つ • 修正や拡張を行う際にリスクを恐れて メンタルモデルにそぐわないコードを書くと 技術負債として重くのしかかる • リスクをとるか、負債をとるかは アーキテクトとして責任をもって判断する •
誰かが責任を持たないと全員が不幸になる 63
“本質的な複雑さは単純に、 付随的な複雑さは取り除け” 64
ご清聴ありがとうございました 65
Advertisement