SlideShare a Scribd company logo
TableViewAgent
@akuraru
自己紹介
• 朝までスライド一枚もできてない
• ViewControllerが100行以上はレガシー
@akuraru
対象
• CoreDataを触ったことがある
• TableViewもある
• TableViewDelegateを書くのが面倒くさい
今回の目的
• 設計の話
• TableViewAgentの紹介
• TODO
Model
Controller View
一般的なMVC
• ユーザーの操作をControllerが受け取
り、Modelを操作し、操作されたことを
Viewに通知する、ViewはModelを参照し
反映する。
Model
Controller View
ユーザー
表示入力・操作
変更
操作 状態参照 通知
今回MVCを取り出して
言いたいこと
• 概ねViewはModelの写像である。
• しかし、Modelを表示するための変換処
理をViewで処理するわけもいかず、
Controllerで行ったりする。
• 結果、Controllerが肥大化する
Model
Controller View変更
操作 状態参照
• ServiceをModelとControllerの間に挟む
• Modelの変換処理はServiceが行い、
ViewObjectという値オブジェクトを生成
する
• ViewはViewObjectの写像にする
• ServiceとViewObjectの名前は適当です
Model
Controller View変更
操作 状態参照
Service ViewObject
操作
生成
状態参照
View
状態参照
ViewObject
• 今回はここだけの話をする
TableViewCell状態参照ViewObject
• TableViewCellをViewObjectに対して一対
一対応して表示する
TableViewCell状態参照ViewObject TableViewCell状態参照ViewObject
TableViewCell状態参照ViewObject
TableViewCell状態参照ViewObject TableViewCell状態参照ViewObject
TableViewCell状態参照ViewObject TableViewCell状態参照ViewObject
TableViewCell状態参照ViewObject
TableViewViewObjects
• TableViewをViewObjectの配列として表
現できる
• 実際に表示されたものはテストしにく
い
• ”Model→値”部分はテストしやすい。
• “値→View”部分はテストが大変。
• ”値→View”に不安をなくしてテストを減
らしたい
TableViewAgent
• TableViewDelegateの代行クラス
• 最小の物だけDelegateで提供
• Sample is Best
TableViewの問題
• DBから取ってきた配列を表示したい
• 列の数がいくつで...Cellに代入して...編
集するためには...削除が...
_人人人人人人人_
> 面倒くさい <
 ̄Y^Y^Y^Y^Y^Y ̄
TableViewでやりたいこと
• 配列の内容を表示する
• 要素に合ったCellの選択
• Cellの選択したときの挙動
• Cellの削除
提供しているメソッド
@property (nonatomic) id<AgentViewObjectProtocol> viewObjects;
@property (weak, nonatomic) id<TableViewAgentDelegate> delegate;
@property (nonatomic) BOOL editing;
- (void)setEditableMode:(EditableMode)mode;
- (void)redraw;
- (void)setEditing:(BOOL)b;
提供しているDelegate
- (NSString *)cellIdentifier:(id)viewObject;
- (void)didSelectCell:(id)viewObject;
- (void)deleteCell:(id)viewObject;
まとめ
• ViewControllerを短く書きましょう
• そのためのViewを作る
TODO
• CocoaPodsに申請する
• セクションヘッダーの実装

More Related Content

Similar to TableViewAgent

Slide
SlideSlide
Slide
Akura Pi
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
Net Penguin
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
toyship
 
Mvc
MvcMvc
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2
Jun Yokoyama
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
 
MVCになぞらえて理解するReact
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReact
iPride Co., Ltd.
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
jz5 MATSUE
 
iOSでMVVM入門
iOSでMVVM入門iOSでMVVM入門
iOSでMVVM入門
ishikawa akira
 

Similar to TableViewAgent (12)

Slide
SlideSlide
Slide
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
 
Knockout
KnockoutKnockout
Knockout
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
 
Mvc
MvcMvc
Mvc
 
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
 
MVCになぞらえて理解するReact
MVCになぞらえて理解するReactMVCになぞらえて理解するReact
MVCになぞらえて理解するReact
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
iOSでMVVM入門
iOSでMVVM入門iOSでMVVM入門
iOSでMVVM入門
 

More from Akura Pi

Githubサービスについて
GithubサービスについてGithubサービスについて
Githubサービスについて
Akura Pi
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
Akura Pi
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合Akura Pi
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイルAkura Pi
 
そもそもFloatとは
そもそもFloatとはそもそもFloatとは
そもそもFloatとはAkura Pi
 
Metaprogramming
MetaprogrammingMetaprogramming
MetaprogrammingAkura Pi
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaultsAkura Pi
 
Storyboard
StoryboardStoryboard
StoryboardAkura Pi
 
Groovy base
Groovy baseGroovy base
Groovy baseAkura Pi
 

More from Akura Pi (10)

Githubサービスについて
GithubサービスについてGithubサービスについて
Githubサービスについて
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイル
 
そもそもFloatとは
そもそもFloatとはそもそもFloatとは
そもそもFloatとは
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaults
 
Currying
CurryingCurrying
Currying
 
Storyboard
StoryboardStoryboard
Storyboard
 
Groovy base
Groovy baseGroovy base
Groovy base
 

TableViewAgent