Submit Search
IOS/Androidアプリの3つの大事な設計方針
244 likes
44,114 views
Ken Morishita
1 of 74
Download now
Downloaded 293 times
1
2
3
4
5
6
7
8
9
10
Most read
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
More Related Content
PDF
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
ODP
MVC の Model を考える
tomo_masakura
PPTX
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
PDF
OPC UAをオープンソースやフリーのソフトで遊んでみた
ミソジ
PPTX
脱RESTful API設計の提案
樽八 仲川
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
PDF
go_router が隠してくれるもの
cch-robo
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
Ken Morishita
MVC の Model を考える
tomo_masakura
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
OPC UAをオープンソースやフリーのソフトで遊んでみた
ミソジ
脱RESTful API設計の提案
樽八 仲川
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
go_router が隠してくれるもの
cch-robo
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
What's hot
(20)
PDF
Appium 2.0 ではじめるモバイルアプリテスト
Masayuki Wakizaka
PDF
例外設計における大罪
Takuto Wada
PDF
WebSocketのキホン
You_Kinjoh
PDF
ARでVRアバターを表示するシステムを構築しよう
torisoup
PDF
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
Yoshiki Hayama
PDF
AppiumのWebViewアプリテストの仕組みとハマりどころ
Masayuki Wakizaka
PDF
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
PDF
インタフェース完全に理解した
torisoup
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
PDF
Game Development on AWS (ゲーム開発環境を向上させるためのAWS活用術)
Amazon Web Services Japan
PDF
事業成長にコミットするエンジニア組織への道のり
Recruit Lifestyle Co., Ltd.
PPTX
ARマーカーを利用したHoloLens同士の位置合わせ
Takahiro Miyaura
PDF
大企業アジャイルの勘所 #devlovex #devlovexd
Itsuki Kuroda
PDF
アイデア収束からプロトタイピング
Masaya Ando
PDF
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
PDF
UniTask入門
torisoup
PPTX
UniRxでMV(R)Pパターンをやってみた
torisoup
PPTX
MVCになぞらえて理解するReact
iPride Co., Ltd.
PDF
ドメイン駆動設計をゲーム開発に活かす
増田 亨
Appium 2.0 ではじめるモバイルアプリテスト
Masayuki Wakizaka
例外設計における大罪
Takuto Wada
WebSocketのキホン
You_Kinjoh
ARでVRアバターを表示するシステムを構築しよう
torisoup
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
Yoshiki Hayama
AppiumのWebViewアプリテストの仕組みとハマりどころ
Masayuki Wakizaka
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
インタフェース完全に理解した
torisoup
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
Game Development on AWS (ゲーム開発環境を向上させるためのAWS活用術)
Amazon Web Services Japan
事業成長にコミットするエンジニア組織への道のり
Recruit Lifestyle Co., Ltd.
ARマーカーを利用したHoloLens同士の位置合わせ
Takahiro Miyaura
大企業アジャイルの勘所 #devlovex #devlovexd
Itsuki Kuroda
アイデア収束からプロトタイピング
Masaya Ando
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
UniTask入門
torisoup
UniRxでMV(R)Pパターンをやってみた
torisoup
MVCになぞらえて理解するReact
iPride Co., Ltd.
ドメイン駆動設計をゲーム開発に活かす
増田 亨
Ad
Viewers also liked
(20)
PDF
iOS アプリのメンテナンス性を高めるための基本的な考え方
kakegawa-atsushi
PPTX
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Hiroyuki Kusu
PDF
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
PDF
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
Kenji Tanaka
PDF
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
PDF
NS Prefix 外伝 … Copy-On-Write #関モバ
Tomohiro Kumagai
PPT
Android mvc-frameworkが凄くて泣きそう
naoyuki miyata
PDF
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
PDF
AnyObject – 自分が見落としていた、基本の話
Tomohiro Kumagai
PDF
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
PDF
リアクティブプログラミングとMVVMパターンについて
Hidenori Takeshita
PDF
Android cleanarchitecture
Tomoaki Imai
PDF
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
PDF
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
PPTX
モバイルアプリの状態遷移を攻略したい!
Tatsuji Kuroyanagi
PDF
Source kittenについて
佐藤 俊太郎
PDF
Gofのデザインパターン stateパターン編
Ayumu Itou
PDF
[Android]Fragmentとのつきあい方を考える
ichigotake .
PDF
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
SORACOM, INC
PDF
アプリ開発を回すためにこれだけは押さえておきたい3つの軸
セカイラボ(Sekai Lab Pte. Ltd.)
iOS アプリのメンテナンス性を高めるための基本的な考え方
kakegawa-atsushi
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Hiroyuki Kusu
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
Kenji Tanaka
プロトコル指向 - 夢と現実の狭間 #cswift
Tomohiro Kumagai
NS Prefix 外伝 … Copy-On-Write #関モバ
Tomohiro Kumagai
Android mvc-frameworkが凄くて泣きそう
naoyuki miyata
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
AnyObject – 自分が見落としていた、基本の話
Tomohiro Kumagai
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
リアクティブプログラミングとMVVMパターンについて
Hidenori Takeshita
Android cleanarchitecture
Tomoaki Imai
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
モバイルアプリの状態遷移を攻略したい!
Tatsuji Kuroyanagi
Source kittenについて
佐藤 俊太郎
Gofのデザインパターン stateパターン編
Ayumu Itou
[Android]Fragmentとのつきあい方を考える
ichigotake .
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
SORACOM, INC
アプリ開発を回すためにこれだけは押さえておきたい3つの軸
セカイラボ(Sekai Lab Pte. Ltd.)
Ad
More from Ken Morishita
(6)
PDF
BigQuery勉強会 Standard SQL Dialect
Ken Morishita
PPTX
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
Ken Morishita
PDF
SwiftでのiOSアプリ開発
Ken Morishita
PDF
最近の単体テスト
Ken Morishita
PDF
Logをs3とredshiftに格納する仕組み
Ken Morishita
PPTX
Pythonとdeep learningで手書き文字認識
Ken Morishita
BigQuery勉強会 Standard SQL Dialect
Ken Morishita
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
Ken Morishita
SwiftでのiOSアプリ開発
Ken Morishita
最近の単体テスト
Ken Morishita
Logをs3とredshiftに格納する仕組み
Ken Morishita
Pythonとdeep learningで手書き文字認識
Ken Morishita
IOS/Androidアプリの3つの大事な設計方針
1.
iOS, Androidアプリの 3つの⼤大事な設計⽅方針 2014年年3⽉月 ゆめみ 森下 @mokemokechicken
2.
これはiiOOSS,, AAnnddrrooiiddの NNaattiivveeアプリについての話よ
3.
いつも誰か知らない人が作っ たアプリのコードを((レビュー&修正させられて いる人を近くで))みていて「せめてこう いうことには気をつけて欲し い」ということを33つ挙げてみ たわ
4.
これを守るだけでかなりマシな 作りにできて、自分もお客さん もハッピーになれる((たぶん…�)んだ から、覚えておいてよね!
5.
端的に言うとこういうこと •
Model と それ以外を分ける • Objectのライフサイクルと参照関 係の整理理をしよう • ⾮非同期制御でState Machineを活⽤用 しよう 11つずつ説明していくよ
6.
MODELとそれ以外を分ける
7.
まずは「MMooddeellって何?」っ てことよね。
MMooddeellが意味する範囲は広い のよ。 基本的にはアプリケーション データの本質的な処理をする のがMMooddeellに相当するわ。 といってもピンとこないから、 「何がMMooddeellでないか?」を 考えるとわかりやすいよ。
8.
簡単に言うとMMooddeellは
アプリの中でUUIIに関係しない部分 つまりUUIIに関係する部分はMMooddeell ではないわ UI=User Interface: ユーザの操作を受け付けたり何かを表⽰示をする部分
9.
アプリケーション UIに関わる部分 UIに関わらない部分 ここが「MMooddeell」 ここが「MMooddeell以外」
図にするとこんな感じ
10.
MMooddeellが行うことをいくつか 挙げてみると、こんな感じ •
通信処理理 • DB操作、データの永続化 • そのアプリ独特の計算処理理 こういうのってUUII関係ないよね?
11.
MMooddeellはUUIIに無関係の部分だ から、
iiPPhhoonneeとiiPPaaddのようにVViieeww のレイアウトが全く違うよう な場合でも再利用できるはず の部分なの。 もしVViieewwが変わったときに、 大きいコピペが必要ならそれ はMMooddeellかもよ? 極端な話、CCUUIIでもMMooddeellの 部分は再利用できるはず。 CUI=Command UI: テキストベースのUI. Shellとか。
12.
アプリケーション UIに関わる部分 UIに関わらない部分 MMooddeell ここが「EEddiittoorr」
あと「MMooddeell以外」だと呼びにくいから、 今後その部分を「EEddiittoorr」と呼ぶことにするよ
13.
MMooddeell EEddiittoorr
気軽に超えてはいけない壁 MMooddeellとEEddiittoorrの間のやりとりには、 絶対に守るべきルールがある
14.
MMooddeell EEddiittoorr
よし通れ! EEddiittoorr → MMooddeellは自由にアクセスして良いわ
15.
MMooddeell EEddiittoorr
お前は絶対にダメだ MMooddeell → EEddiittoorrは直接アクセスしてはダメ EEddiittoorr部分は代替可能 なのだから当然よね。 MMooddeellはEEddiittoorrの 具体的な存在を知らないものよ
16.
じゃあ、MMooddeellからEEddiittoorrに アクセスすることは無いのか?
もちろん、そんなわけはないよね
17.
MMooddeell EEddiittoorr
ポイント残⾼高を教えて! 例えば、残高を表示したい場合 1000ptだよ すぐにわかる((同期的にrreettuurrnn で値が返せる)ならこんなかん じになるね。 return
18.
MMooddeell EEddiittoorr
ポイント残⾼高を教えて! 例えば、残高を表示したい場合 あ、今調べるわ でも、通信したりしないとわか らないケースがあるよね。その 場合は同期的に値は返せないの。 あっそ, 待ってるよ return
19.
MMooddeell EEddiittoorr
あ、、今調べるわ そういうとき、通信が終わった ことを通知する仕組みが必要に なるよ 待ってるよ return あれ、どう伝えよう?
20.
MMooddeellからEEddiittoorrへの通知方法 •
Observerパターンを使う • iOS なら NSNotificationCenter を 使っても良良い こういうときは OObbsseerrvveerrパターンやその類 似の方法を使うのが普通だね Observerパターン: デザインパターンの⼀一つ。知らなければググってみよう。
21.
MMooddeell EEddiittoorr
残高教えて→ ←ごめん、わからん じゃあ調べてよ→ ←待ってろ ←通知 残高教えて→ ←1000pt だよ 典型的な全体の流れは こんな感じになるよ 通信中
22.
あと、MMooddeellはいつどんな指示 を受けても問題を起こさない振 る舞いが求められるの。
つまり、外部からの指示に言わ れるがまま従っていてはダメよ
23.
MMooddeell EEddiittoorr
調べてよ→ ←了解 調べてよ→ ←了解 調べてよ→ ←了解 ←通知 通信中 通信中 通信中 ←通知 ←通知 こんなMMooddeellはダメよ 高橋名人の連打で アプリが落ちるわ
24.
MMooddeell EEddiittoorr
調べてよ→ ←了解 MMooddeell自身の判断で 動作を変えて良いの。 サーバみたいなものね。 調べてよ→ ←はいはい 調べてよ→ ←はいはい ←通知 通信中
25.
じゃあ、まとめるよ •
Model → Editor の直接参照はしない • ⾮非同期で結果を返すときは Observer パターンなどを使う • Modelはいつどんな指⽰示を受けても問 題を起こさないことが⼤大事とても大事なことだか ら覚えておいてね!
26.
OBJECTのライフサイクルと参 照関係の整理理をしよう
27.
OObbjjeeccttには生成と消滅があるよ。
OObbjjeeccttの寿命はそれぞれ違う。 いつ生まれていつ死ぬかをライフ サイクルと呼びます。 ライフサイクル ⽣生成 使⽤用 消滅 とあるObjectの⼀一⽣生
28.
OObbjjeeccttは誰かの指示で生成され て、参照を保持されるの。
そして基本的に誰からも参照さ れないと消滅します。 孤独死上等 A B ⽣生成・保持 A B 消滅
29.
だから通常は 「長命」
→ 「短命」 という参照関係で存在を維持 するわ せいぞーんせんりゃくー
30.
C 逆に「短命」 →
「長命」 という参照だけだと、 短命OObbjjeeccttが消滅したとき に一緒に長命OObbjjeeccttが消滅 してしまうよね。 A B 本当は⻑⾧長命 C A B 事故死天寿
31.
あとライフサイクルが無関係 なOObbjjeeccttが参照を保持する と消滅できなくなるね。
メモリ不足の原因になるわ。 A B ライフサイクルが無関係 なのに参照関係がある C 「死ねない、、」 本来の参照
32.
ライフサイクルと参照関係 •
⻑⾧長命→短命 が基本 • 各Objectがどういうライフサイク ルであるべきか、を念念頭に参照関 係を設計するのが⼤大事 当たり前体操よね
33.
じゃあ、まず最もよく見かけ る問題を紹介するわ
34.
AAnnddrrooiiddだと AAccttiivviittyyやFFrraaggmmeenntt
iiOOSSだと VViieewwCCoonnttrroolllleerr というのがあるよね?
35.
これらは 画面が遷移すると生成されたり 破棄�されたりするじゃない?
便宜的にPPaaggeeCCoonnttrroolllleerr(造 語)と呼ぶことにするわ。 WWeebbでいう、一つのページを 制御する役割という感じかしら。
36.
PPaaggeeCCoonnttrroolllleerrは比較的短命よね
ユーザの操作で生成・消滅を繰り 返すわ 遷移喪失
37.
最もよく見かける問題それは
PPaaggeeCCoonnttrroolllleerrだけが本来 長命であるOObbjjeeccttを生成・ 維持・使用する というケースよ
38.
MMooddeell PPaaggeeCCoonnttrroolllleerr
調べてよ→ 通信中 FFWW 生成 生成 死んで 調べてよ→ 生成 死んで 生成 通信中 操作(進む) 操作(戻る) 操作(進む) 操作(戻る) 操作(進む) 操作(戻る) こんな感じになるよ
39.
今の場合だとユーザが画面を 行ったり来たりするだけで通 信が多重に発生するわね。
通信中のMMooddeellは生き残るか らIInnnneerrCCllaassssとかをMMooddeellに 渡すとPPaaggeeCCoonnttrroolllleerrとそ の配下のVViieewwも大抵生き残る。 どんどん動作が重くなるわ。
40.
ユーザの操作は防ぐことがで きない(ケースが多い)わ。
問題は何度も不要な重い処理 をするMMooddeellの方にあるわ。
41.
MMooddeell PPaaggeeCCoonnttrroolllleerr
調べてよ→ 通信中 生成 調べてよ→ 生成 通信中 でもこの構造だと MMooddeellは都度生成され てるから通信中かどう か判断できないわ
42.
MMooddeell PPaaggeeCCoonnttrroolllleerr
調べてよ→ 通信中 調べてよ→ 既読スルー MMooddeellが状態を維持できれば、回避する こともできるわね。つまりこのMMooddeellは PPaaggeeCCoonnttrroolllleerrより長命であるべきな のよ
43.
MMooddeell PPaaggeeCCoonnttrroolllleerr
調べてよ→ 通信中 調べてよ→ 既読スルー MMooddeellRReeppoo 生成 Model頂戴 どうぞ Model頂戴 どうぞ 実現例としては例えば、 MMooddeell RReeppoossiittoorryyのよ うな超長命のOObbjjeeccttが MMooddeellを生成・維持する 方法があるわね
44.
よくサンプルコードで vviieewwDDiiddLLooaadd(())
とかに直接 NNSSUURRLLCCoonnnneeccttiioonnみたいな通信 OObbjjeeccttを生成しているのを見か けるけど あれはデモコードだから許される だけだから 製品コードではダメ、絶対
45.
今回は通信を行うMMooddeellの例だ けど、大きなDDaattaaを読み書き したり、CCaammeerraaデバイスを起 動したり、色々なケースがある わ。
46.
PPaaggeeCCoonnttrroolllleerrの他にも TTaabblleeのCCeellllの中のIImmaaggeeVViieewwな どはCCeellllが再利用されたりするか ら気をつける必要があるわ
とにかく 短命((EEddiittoorr系))→長命((MMooddeell系) の関係は気をつけた方がいいよ EEddiittoorrはユーザの操作で状態が 変わるからね
47.
じゃあ、まとめるよ とても大事なことだか ら覚えておいてね!
• 各Objectがどういうライフサイクル であるべきか、を念念頭に参照関係を 設計するのが⼤大事 • PageControllerのModel直接⽣生成は 特に注意 • おかしいなと思ったら基本に⽴立立ち返 ろう
48.
⾮非同期制御でSTATE MACHINE を活⽤用しよう
49.
アプリを作っていると CCoonnttrroolllleerr的な役割のCCllaassssが どんどん肥大化していくことが あるじゃない?
そういうのは FFaatt CCoonnttrroolllleerr と呼ばれる皆よく困っている状 況なのよね
50.
MMooddeellのコードがCCoonnttrroolllleerrに 混入�しているケースは論外よ。
でも、PPaaggeeCCoonnttrroolllleerrのよう なCCoonnttrroolllleerrは画面の状態を制 御しないといけないのだけど、 状態が増えると管理が難しく なってくるわ。 そういう場合のだいぶマシな実 装方法の話をするわ。
51.
PPaaggee CCoonnttrroolllleerr
FFrraammeewwoorrkk UUII 通信 SSeennssoorr//DDeevviiccee Create/Destroy, Resume/Suspend Tap, etc… OK, Error GPS, BLE, Camera そもそもPPaaggeeCCoonnttrroolllleerr((以降 PPCCと略))は色々なEEvveennttを処理 する必要があるし、 EEvveennttはどんな順番でいつ来る かはほぼわからないわけよ。 画面表示 どんとこい
52.
通常各EEvveenntt HHaannddlleerrがPPCCの メソッド((やクロージャ))として 定義される。
そのEEvveennttが来た時の処理は、 他のEEvveennttの発生状況(→現在 の状態)に依存することが多い。 つまりHHaannddlleerrのLLooccaallな状態 だけでは決められないので、現 在の状態をPPCC全体で共有する ためにFFllaaggやSSttaattuussで管理す るようになる。 Event Handler: Eventを処理する部分
53.
SSttaattuuss管理の場合、
どのSSttaattuussの時にどういう EEvveennttが来たら、次にどの SSttaattuussになるかという決まり があるけど、それが各EEvveenntt HHaannddlleerrに分散記述されると見 通しが悪くなる。 IIffやsswwiittcchhが大量に出てくる感 じね。こうなると可読性が落ち ていくわ。 FFllaaggの場合も同様ね。
54.
UUIIやVViieewwの仕様は極めて変わり やすいわ
PPCCはその影響をモロに受ける PPCCの可読性や保守性を高くで きれば、多くの人がハッピーに なれるわけよ 仕変もこい
55.
じゃあ、どうするか?
簡潔にいうと SSttaattee MMaacchhiinnee((略してSSMM))を別 途作って状態をそこで管理する ということよ SSMMは次の事が主な役割よ -- EEvveennttを受け付けて状態を遷移 -- 遷移時にAAccttiioonnを呼び出す 状態機械
56.
概要はこのくらいにして 例で考えましょう
TTOODDOOを管理するアプリを考え るわ TTOODDOO情報はサーバにあり、そ れを操作するMMooddeellは既にある とするよ TODO管理
57.
TODO3 TODO1 TODO2 削除 削除 削除 削除しますか? OK Cancel •
サーバとの通信中はクルクルインジケーターを表示 • TODOをListで表示 • それぞれ削除ボタンがある • 削除ボタンを押すと、ダイアログが表示されて本当 に削除するか尋ねる。Yesなら削除、Noなら何もしな い。 • Yesならサーバと通信して、削除成功かエラーかをダ イアログで表示する • 削除処理中は、新たな削除は受け付けない。 ざっくり仕様よ 画⾯面イメージ
58.
本当ならいくつか実装例を挙げ て評価したいけど、面倒だから オススメの方法についてだけ説 明していくよ
59.
まずSSMMをこんな感じで定 義するわ ちなみにSSMMはツール で作るよ(後述)
60.
PPaaggee CCoonnttrroolllleerr
SSttaattee MMaacchhiinnee ② 状態遷移したら Actionを呼び出す ① Eventを送る PPCCとSSMMとの関係はこう。 PPCCはAAccttiioonnを実装する。
61.
例えば 呼び出すAAccttiioonnを
こうしておく Action
62.
この場合、 PPCCが実装するAAccttiioonnは
以下のものになるね -‐‑‒ updateModel -‐‑‒ showDeleteConfirm -‐‑‒ closeDialog -‐‑‒ deleteModel -‐‑‒ showResult -‐‑‒ finishComm
63.
33つを並べてみる 整列 -‐‑‒
updateModel -‐‑‒ showDeleteConfirm -‐‑‒ closeDialog -‐‑‒ deleteModel -‐‑‒ showResult -‐‑‒ finishComm
64.
このやり方のメリットはこんなと ころかしら
11.. 状態遷移がグラフ化され何を したいか理解がし易い 22.. 各AAccttiioonnの位置づけが明確な ので実装しやすい 33.. ボタンの連打や予期せぬ EEvveennttを考慮しなくて良い 44.. 要するに可読性が高い 55.. 状態遷移の変更に強い
65.
例えば、仕様変更があるとする
Deleteボタンを押した時に サーバに削除可能か確認するよ うにしてください と
66.
この辺が変わるわね
67.
また、仕様変更があるとする
Deleteが成功したらTodoリスト をサーバから再取得してくださ い と
68.
こんな感じかなぁ
OOKK//NNGG,, YYeess//NNoo とかは共通で良いか もね
69.
さっきの遷移図が良いかは置い ておいて、
大事なのは、あのグラフを見て どういう状態を考えるべきかと いう本質的な問題に集中できる ことよ。レビューも著しく捗る わ。 FFllaagg管理だともうこの複雑レベ ルですら可読性が超低下してい ると思うよ
70.
ただ、このSSMMの実装を手でやる と大変。最後の遷移図でJJaavvaaで 880000行くらいになったりするわ。
そこで SMC http://smc.sourceforge.net/ というのを使っているわ。 SMC
71.
SSMMCCのDDSSLLで状態を記述する。 さっきSSMMなら例えばこうよ。
hhttttppss::////ggiisstt..ggiitthhuubb..ccoomm//mmookkeemmookkeecchhiicckkeenn//99773333556655 ((7733行)) 遷移図画像とかも出力できるか らとても便利じゃない? ((要GGrraapphhvviizz))
72.
hhttttpp::////ggooooddppaarrttss..dd..yyuummeemmii..jjpp//ggeenneerraattoorr##SSttaatteeMMaacchhiinneeGGeenneerraattoorr---- dd2233558833bb0044ddaa44ff77bb22ff88ccbbaa3399ee664411ff11aa117722ee6677bbcc55dd
とかでさっきの例が見れるよ SSMMCCのツール群を各開発機に IInnssttaallllするのも面倒なので、 WWeebb化したよ hhttttpp::////ggooooddppaarrttss..dd..yyuummeemmii..jjpp// 一応メンテナンスしていくつも りだから誰が使っても良いよ ご自由に
73.
じゃあ、まとめるよ •
State Machineですっきり実装しよう • Page Controllerだけじゃなくて Modelの実装でも使えるよ • State Machineは⾃自動⽣生成が楽 とても大事なことだか ら覚えておいてね!
74.
さいごにもう一度 •
Model と それ以外を分ける • Objectのライフサイクルと参照関 係の整理理しよう • ⾮非同期制御でState Machineを活⽤用 しよう 大事なことだから22度言います
Download