Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
増田 亨
5,227 views
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計の基礎知識の説明と、ゲーム開発への活かし方。
Software
◦
Related topics:
Object-Oriented Concepts
•
Read more
7
Save
Share
Embed
Save to Drive
Download now
Downloaded 55 times
1
/ 45
2
/ 45
3
/ 45
4
/ 45
5
/ 45
6
/ 45
7
/ 45
8
/ 45
9
/ 45
10
/ 45
11
/ 45
12
/ 45
13
/ 45
14
/ 45
15
/ 45
16
/ 45
17
/ 45
18
/ 45
19
/ 45
20
/ 45
More Related Content
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
134 slides
119K views
PPTX
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
50 slides
10.4K views
PDF
ドメイン駆動設計 本格入門
by
増田 亨
139 slides
46.9K views
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
44 slides
15.5K views
PPTX
テストコードの DRY と DAMP
by
Yusuke Kagata
11 slides
4.5K views
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
41 slides
165.3K views
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
139 slides
133.6K views
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
ドメイン駆動設計 基本を理解する
by
増田 亨
134 slides
119K views
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
50 slides
10.4K views
ドメイン駆動設計 本格入門
by
増田 亨
139 slides
46.9K views
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
44 slides
15.5K views
テストコードの DRY と DAMP
by
Yusuke Kagata
11 slides
4.5K views
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
41 slides
165.3K views
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
139 slides
133.6K views
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
What's hot
PDF
Unityでオニオンアーキテクチャ
by
torisoup
44 slides
12.5K views
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
127 slides
26.1K views
PDF
インタフェース完全に理解した
by
torisoup
39 slides
6.9K views
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
45 slides
51.8K views
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
153 slides
8.4K views
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
PDF
ドメイン駆動設計という設計スタイル
by
増田 亨
63 slides
17.7K views
PPTX
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
89 slides
110K views
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
99 slides
136.1K views
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
85 slides
28.8K views
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
103 slides
16.2K views
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
45 slides
24.6K views
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
89 slides
146.5K views
PDF
ソフトウェア開発のやり方の改善
by
増田 亨
26 slides
7.2K views
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
129 slides
243.2K views
Unityでオニオンアーキテクチャ
by
torisoup
44 slides
12.5K views
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
127 slides
26.1K views
インタフェース完全に理解した
by
torisoup
39 slides
6.9K views
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
45 slides
51.8K views
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
153 slides
8.4K views
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
ドメイン駆動設計という設計スタイル
by
増田 亨
63 slides
17.7K views
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
89 slides
110K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
99 slides
136.1K views
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
85 slides
28.8K views
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
103 slides
16.2K views
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
45 slides
24.6K views
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
89 slides
146.5K views
ソフトウェア開発のやり方の改善
by
増田 亨
26 slides
7.2K views
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
オブジェクト指向できていますか?
by
Moriharu Ohzu
129 slides
243.2K views
Similar to ドメイン駆動設計をゲーム開発に活かす
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
133 slides
32.7K views
PDF
私がドメイン駆動設計をやる理由
by
増田 亨
25 slides
23.1K views
PDF
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
99 slides
26.3K views
PDF
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
99 slides
1K views
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
PPT
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
48 slides
15.1K views
PDF
ドメイン駆動設計入門
by
増田 亨
53 slides
28.9K views
PDF
DDD 20121106 SEA Forum November
by
増田 亨
74 slides
4.3K views
PDF
ちいさなオブジェクトでドメインモデルを組み立てる
by
増田 亨
26 slides
15.1K views
PDF
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
65 slides
11.1K views
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
113 slides
33.3K views
PDF
ドメイン駆動設計という仕事の流儀
by
増田 亨
53 slides
16.6K views
PDF
【19-B-5】出張!DDD難民救済キャンプ
by
kentaro watanabe
38 slides
1.8K views
PDF
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
40 slides
13.6K views
PDF
UX - 業務システムにも感動を
by
Yasunobu Kawaguchi
52 slides
4.1K views
PDF
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
76 slides
105.9K views
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
55 slides
139.6K views
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
61 slides
26.1K views
PDF
ゲーム業界から見たアジャイル開発
by
Masaru Nagaku
21 slides
3.8K views
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
133 slides
32.7K views
私がドメイン駆動設計をやる理由
by
増田 亨
25 slides
23.1K views
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
99 slides
26.3K views
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
99 slides
1K views
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
48 slides
15.1K views
ドメイン駆動設計入門
by
増田 亨
53 slides
28.9K views
DDD 20121106 SEA Forum November
by
増田 亨
74 slides
4.3K views
ちいさなオブジェクトでドメインモデルを組み立てる
by
増田 亨
26 slides
15.1K views
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
65 slides
11.1K views
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
113 slides
33.3K views
ドメイン駆動設計という仕事の流儀
by
増田 亨
53 slides
16.6K views
【19-B-5】出張!DDD難民救済キャンプ
by
kentaro watanabe
38 slides
1.8K views
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
40 slides
13.6K views
UX - 業務システムにも感動を
by
Yasunobu Kawaguchi
52 slides
4.1K views
オブジェクト指向の設計と実装の学び方のコツ
by
増田 亨
76 slides
105.9K views
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
55 slides
139.6K views
ドメイン駆動設計の正しい歩き方
by
増田 亨
61 slides
26.1K views
ゲーム業界から見たアジャイル開発
by
Masaru Nagaku
21 slides
3.8K views
More from 増田 亨
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
9 slides
10.3K views
PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
7 slides
1.7K views
PDF
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
21 slides
11.7K views
PDF
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
39 slides
7.1K views
PDF
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
24 slides
2.7K views
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
43 slides
14.4K views
PDF
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
29 slides
4.7K views
PDF
ソフトウェア設計の学び方を考える
by
増田 亨
39 slides
25.4K views
PDF
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
by
増田 亨
38 slides
3.8K views
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
60 slides
44.8K views
PDF
ビジネスルールの複雑さに立ち向かう
by
増田 亨
53 slides
12.6K views
PDF
DDD sample code explained in Java
by
増田 亨
24 slides
22.4K views
PDF
アジャイルなソフトウェア設計を目指して
by
増田 亨
94 slides
12.3K views
PDF
SoR 2.0 summary
by
増田 亨
8 slides
1.4K views
PDF
毎日が越境だ!
by
増田 亨
51 slides
10.6K views
PDF
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
58 slides
9.4K views
PDF
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
31 slides
5.9K views
PDF
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
28 slides
4K views
PDF
現場で役立つシステム設計の原則
by
増田 亨
11 slides
8.9K views
正しいものを正しく作る塾-設計コース
by
増田 亨
9 slides
10.3K views
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
7 slides
1.7K views
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
21 slides
11.7K views
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
39 slides
7.1K views
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
24 slides
2.7K views
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
43 slides
14.4K views
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
29 slides
4.7K views
ソフトウェア設計の学び方を考える
by
増田 亨
39 slides
25.4K views
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
by
増田 亨
38 slides
3.8K views
マイクロサービス 4つの分割アプローチ
by
増田 亨
60 slides
44.8K views
ビジネスルールの複雑さに立ち向かう
by
増田 亨
53 slides
12.6K views
DDD sample code explained in Java
by
増田 亨
24 slides
22.4K views
アジャイルなソフトウェア設計を目指して
by
増田 亨
94 slides
12.3K views
SoR 2.0 summary
by
増田 亨
8 slides
1.4K views
毎日が越境だ!
by
増田 亨
51 slides
10.6K views
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
58 slides
9.4K views
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
31 slides
5.9K views
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
28 slides
4K views
現場で役立つシステム設計の原則
by
増田 亨
11 slides
8.9K views
ドメイン駆動設計をゲーム開発に活かす
1.
ドメイン駆動設計の実践 ~ゲーム開発にどう活用するか~ ギルドワークス 増田 亨 TECH
x GAME COLLEGE #1 2018-8-22 2018/8/22 1
2.
自己紹介 コード例 :https://github.com/system-sekkei/isolating-the-domain ブログ:システム設計日記 http://masuda220.jugem.jp/ https://www.slideshare.net/masuda220/ 22018/8/22
3.
本日の内容 ドメイン駆動設計の基礎知識 ゲーム開発への活用の可能性 ゲーム開発に取り入れる時の障害 障害を乗り越えていくヒント 32018/8/22
4.
ドメイン駆動設計の基礎知識 What is Domain-Driven
Design 42018/8/22
5.
ドメイン駆動設計とは? 52018/8/22
6.
ソフトウェア設計の 考え方とやり方の一つ 62018/8/22
7.
ソフトウェア設計の一般原則 関心の分離 Separation of Concerns モジュール構造 modular
construction 全体を複数の関心事に分解する それぞれの関心事を独立したモジュールとして開発 モジュールを組み合わせて全体を構築する 72018/8/22
8.
ドメインロジックに焦点を合わせる オブジェクト指向でモジュール化する インクリメンタルに設計する ドメイン駆動設計 2018/8/22 8 ドメイン駆動設計では、どのように関心を分離するか? ドメイン駆動設計では、どのようにモジュール構造を組み立てるか?
9.
ドメインロジックに焦点を合わせる どういうこと? 2018/8/22 9
10.
関心事の違い ドメイン駆動設計 従来の設計 ドメインロジックに焦点をあわせる 入出力に焦点をあわせる 主たる関心事
主たる関心事 ドメインの状況を表す値の種類 ユーザインタフェース 値を使った計算ロジック/判定ロジック データベース 計算結果/判定結果の表現方法 通信 2018/8/22 10
11.
ドメインロジックの構成要素 業務アプリケーション分野 ゲーム分野 ビジネスを構成する概念(用語) 顧客、商品、 販売、出荷、請求、… ゲームを構成する概念(用語) ゲームの世界観、キャラクタ設定、 ストーリーに登場する言葉 ビジネスの状況を表現する値 金額、数量、日付、日数、… 会員区分、商品区分、取引区分、… ゲームの状況を表現する値 レベル, ゴールド,HP,
MP, SP, Exp, … アイテム種類,武器種類,防具種類,… 値を使った計算や判定 金額計算ルール、日数計算ルール、… バトル開始条件の判定ルール、 ダメージやポイントの計算ルール 勝敗の判定ルール, … 2018/8/22 11
12.
ドメインロジック以外の関心事 業務アプリケーション分野 ゲーム分野 画面の入出力 データベースアクセス API 通信 … ビジュアルデザイン サウンドエフェクト インタラクションデザイン … アプリケーション開発には必須要素 ドメインロジックとは別の関心事 ドメイン駆動設計では、ドメインロジックに従属すべき関心事 2018/8/22
12
13.
ドメインロジックに焦点を合わせる理由 13 1. ソフトウェアの複雑さの原因は、 ドメインロジック(計算ロジックと判定ロジック)にある 2. ドメインロジックと入出力が混在していると、 ドメインロジックの全体像や構造が見えてこない 3.
入出力の関心事を分離して、ドメインロジックだけを対象にすると、 ドメインロジックの輪郭や構造がはっきりしてくる 4. ドメインロジックの輪郭や構造が見えてくると、計算ロジックと判定ロ ジックの発見が進み、ロジックの整理がやりやすくなる 5. 計算ロジックと判定ロジックが整理できると、入出力の記述もシンプル になる 6. ソフトウェア全体が、見通しがよくなり、変更が楽で安全になる 2018/8/22
14.
ドメインロジックの関心事を ソフトウェアの構造として 入出力から明確に分離する 2018/8/22 14
15.
入出力+ドメインロジック プレゼンテーション層 データソース層 アプリケーション層 15 入出力処理 ゲームルールの実行 次のアクションの指示 画面入出力 Web API データベース入出力 メッセージ送信 ゲームの入出力設計+機能設計 計算ルール 判定ルール ゲームロジックの分析設計実装 バトル開始条件の判定ルール、 ダメージやポイントの計算ルール 勝敗の判定ルール, … 計算・判定ルールの記述を 独立したモジュールに 分離する 2018/8/22
15
16.
ゲーム開発でのメリット • 計算ロジック、判定ロジックの記述が整理できる – 同一ロジックの重複記述の防止(変更容易性) –
ロジックの組み合わせ方の見通しをよくできる • 世界観/キャラクター設定/シナリオ構成と、計算ロジッ ク/判定ロジックの記述を直接的に関係づける – 全体が整合する – 変更の対象個所、影響範囲を特定しやすい • 入出力処理の記述がシンプルになる – 計算や判定の記述を、ドメイン層に外だしできる 2018/8/22 16
17.
デモ • 入出力から分離したゲームロジックだけのモジュールとは、 どういうものか? • ローグ
classic – ビジュアル/サウンド/インタラクション、どれも貧弱 – ゲームロジック(ゲームの概念/状況を表現する値/その値を 使った計算と判定)を表現したコードが大半を占める • ドメインロジック+CLIの対話式のデバッガみたいなもの – ユーザインタフェースが貧弱なので、もっと面白いゲームにす るためには、ゲームロジックに焦点を合わせた改良になる 2018/8/22 17
18.
オブジェクト指向でモジュール化する どういうこと? 2018/8/22 18
19.
ソフトウェアのモジュール • コードを扱いやすいかたまりにグループ化し て、グループごとに別ファイルで記述する • モジュール間(ソースファイル間)の依存関係 を小さくする/少なくする 2018/8/22
19
20.
モジュール化の2つのアプローチ どういう観点でソースファイルを分割するか? 入出力処理の単位ごと or 計算する値の種類ごと 2018/8/22 20
21.
入出力単位のモジュール化 • 入力を起点に、出力するための処理手順の単位 でファイルを分ける • 機能分割し、機能ごとに入力と出力を定義する •
出力に必要な一連の処理を時系列に記述する (手続き型、スクリプト型) • 共通処理手順(サブルーチン)を集めたファイル を作る 2018/8/22 21
22.
値の種類ごとのモジュール化 • 計算や判定に登場する値(の種類)を見つける – レベル、HP,
MP, SP, Exp.、… – 武器の種類、防具の種類、敵キャラクターの種類、… – ダメージの判定結果、勝敗の判定結果、… • 計算する値の種類ごとに、必要な計算(演算)を整理する – 一致/不一致の判定 – 大小の判定 – 境界値(最大/最小)の判定 – 足し算、引き算 – 掛け算 – 割り算 – 値のリテラル表現への変換 – リテラル表現から値への変換 2018/8/22 22
23.
値の種類ごとのモジュール化 • 計算や判定に登場する値(の種類)を見つける – レベル、HP,
MP, SP, Exp.、… – 武器の種類、防具の種類、敵キャラクターの種類、… – ダメージの判定結果、勝敗の判定結果、… • 計算する値の種類ごとに、必要な計算(演算)を整理する – 一致/不一致の判定 – 大小の判定 – 境界値(最大/最小)の判定 – 足し算、引き算 – 掛け算 – 割り算 – 値のリテラル表現への変換 – リテラル表現から値への変換 値の種類は多い 計算の種類は少ない 2018/8/22 23
24.
値の種類に焦点を合わせる • ドメインロジックを構成する要素 – 状態を表す値の種類 –
値を使った計算ロジック、判定ロジック – 計算結果、判定結果を表す値の種類 • モジュール分割→値の種類ごとにソースファイルを分ける – レベル型、HP型、MP型、SP型、Exp.型、… – ダメージ型、勝敗型、… – 武器種類型、防具種類型、モンスター種類型、… – アイテム一覧型、装備一覧型、敵モンスター群型、... • それぞれの型(値の種類)に対してあると便利なメソッドを定義する – その型でやりたい計算・判定(の名前) – 計算や判定に必要なパラメータ(の型) – 計算結果、判定結果を返す時の型 public Hp gain(Hp bonus) { … } 2018/8/22 24
25.
ゲームロジックを 値の種類ごとに整理する ↓ 型の発見 ↓ 型をclass構文で記述する ↓ 実行時にオブジェクトとして生成する ↓ 必要な計算と判定を実行する2018/8/22 25
26.
オブジェクト指向 262018/8/22
27.
オブジェクト指向のモジュール化 考え方とやり方を学ぶ 2018/8/22 27
28.
オブジェクト指向のモジュール化 考え方とやり方を学ぶ • 値オブジェクト • 区分オブジェクト •
コレクションオブジェクト • … 2018/8/22 28
29.
オブジェクト指向のモジュール化 考え方とやり方を学ぶ • 値オブジェクト • 区分オブジェクト •
コレクションオブジェクト • … 2018/8/22 29
30.
オブジェクト指向のモジュール化 考え方とやり方を学ぶ • 値オブジェクト • 区分オブジェクト •
コレクションオブジェクト • … ガチでやりたい人→ 2018/8/22 30
31.
インクリメンタルに設計する どういうこと? 2018/8/22 31
32.
最初から良い設計はできない 開発を始める時は対象領域の知識が貧弱 最初に書いたコードは、 後から見直すともっと良い書き方が見つかる 最初の要求はあいまいで、 時間とともに具体的で詳細になっていく 要求は、時間とともに変化する 2018/8/22 32
33.
インクリメンタルに設計する 対象領域の知識を少しずつ広げ、掘り下げる 最初に書いたコードを見直しながら改善する 時間とともに具体的で詳細になっていく要求を、 時間とともにコードに反映する 時間とともに変化する要求を、 時間とともにコードに反映する 2018/8/22 33
34.
インクリメンタルに設計する 基本的な値の種類を見つける ↓ 値と値を組み合わせたロジックを置く 場所(第三のクラス)を見つける ↓ 値の種類(型)をグルーピングする 342018/8/22
35.
値と値を組み合わせたクラス 35 • ターン型 – ターンごとの状況を表す値を集めた型 –
ターン before の結果を計算して、ターン after を返す – ターン after の結果を判定して、判定結果を返す • バトルコンテキスト型 – バトル開始時の状態を表現した型 – バトルやターンの計算・判定に必要な基本情報を表現した値の集合 • バトル型 – 進行中のバトルの状態を表す値を集めた型 – ターン型オブジェクトの履歴を持つ – バトルの結果を判定するロジックを持つ ターン方式のバトルのひとつの設計アイデア 2018/8/22
36.
値の種類(型)のグルーピング • ポイント型 – HP型、MP型、SP型に共通のメソッドの定義 •
アイテム型 – 食料型、薬型、巻物型、… class 所持品 { List<アイテム> items; … 所持品 add( アイテム ) { items.add(アイテム) ; } 所持品 remove(アイテム) { item.add(アイテム); } } 型のグルーピングのひとつの設計アイデア 2018/8/22 36
37.
インクリメンタルに設計する • ゲームロジックの知識を広げながら深掘りしていく – 世界観、キャラクタ設定、シナリオ、… –
ゲームルール • 獲得した知識をコードに反映する – 計算や判定する値の種類(型)に焦点を合わせる – 値の種類ごとファイルを分割し、必要な計算ロジックを集める • コードの書き方を改善する – 型の発見、クラスの抽出 – ロジックの改善(引数の型、返す型) – ロジックの移動 – 型と型を組み合わせた型の発見 – 組み合わせ方の改善 2018/8/22 37
38.
ゲーム開発を ドメイン駆動設計で進める時の障害 2018/8/22 38
39.
障害 1. そうはいっても入出力 • ビジュアル命、サウンド命 •
インタラクション命 • 通信が~ • データベースが~ 2. フレームワーク • 入力イベントのハンドラー • 入力を起点に出力までの処理手順をスクリプティングする道具 3. 開発プロセス • フェーズ分けと分業 • コードを書き始めるタイミング/変更のリズム • コード変更の理由の混乱(モデルの変更? ビューの変更? 両方?) 2018/8/22 39
40.
いくつかのアプローチ • ドメイン駆動設計に思い切って飛び込む – 少数精鋭かつ小規模で、徹底してドメイン駆動設計でやってみる –
学びのための実験プロジェクト – 効果は大きいが… • 従来のやり方に少しずつ、こっそりと – HPの単純な足し算・引き算のロジックをHP型に – 勝敗判定を true/false から enum 勝敗型に • 数値の計算ロジックは、必ず独自の型にラッピングする • コレクションの操作ロジックは必ず独自の型にラッピングする • boolean (true/false) 禁止 判定結果は必ず enum 型で宣言する 2018/8/22 40
41.
いくつかのアプローチ • ドメイン駆動設計に思い切って飛び込む – 少数精鋭かつ小規模で、徹底してドメイン駆動設計でやってみる –
学びのための実験プロジェクト – 効果は大きいが… • 従来のやり方に少しずつ、こっそりと – HPの単純な足し算・引き算のロジックをHP型に – 勝敗判定を true/false から enum 勝敗型に • 数値の計算ロジックは、必ず独自の型にラッピングする • コレクションの操作ロジックは必ず独自の型にラッピングする • boolean (true/false) 禁止 判定結果は必ず enum 型で宣言する 実際にコードを書いて その結果を確認しながら、議論し、決めていく 2018/8/22 41
42.
まとめ 2018/8/22 42
43.
ソフトウェア設計の一般原則 関心の分離 Separation of Concerns モジュール構造 modular
construction 全体を複数の関心事に分解する それぞれの関心事を独立したモジュールとして開発 モジュールを組み合わせて全体を構築する 432018/8/22
44.
ドメインロジックに焦点を合わせる オブジェクト指向でモジュール化する インクリメンタルに設計する ドメイン駆動設計 2018/8/22 44 ドメイン駆動設計では、どのように関心を分離するか? ドメイン駆動設計では、どのようにモジュール構造を組み立てるか?
45.
設計のアプローチ ドメイン駆動設計 従来の設計 ドメインロジックに焦点を合わせる 入出力に焦点を合わせる オブジェクト指向でモジュール化
手続き型でモジュール化 インクリメンタルに設計する アップフロントに設計する 違いを理解した上で、自分たちの設計スタイルを議論し決めていく 実際にコードを書きながら2018/8/22 45