• / @ktanaka117
•
• :
• R&D Swift TDD
• PEAKS iOS
• GUI
• 2 4
• GUI


•
• GUI Architectures

https://martinfowler.com/eaaDev/uiArchs.html
• Flow Synchronization

https://www.martinfowler.com/eaaDev/FlowSynchronization.html
• Observer Synchronization

https://www.martinfowler.com/eaaDev/MediatedSynchronization.html
2
•
• GUI
•
•
•
• etc…
GUI
• MVC
• MVP
• MVVM
• Flux
• Redux
• etc…
GUI
• GUI
• View 

Model
•
• = Presentation Domain Separation(PDS)
• PDS GUI
2
• (Observer Synchronization)
• (Flow Synchronization)
•
•
•
•
• ex.) NotificationCenter 

center.post(name: .someNotification, object: nil)
•
•
•
•
• ex.) 

label.text = “hoge”

SessionManager.shared.authToken = “1234567890”
4
• 4
• Screen State
• Presentation State
• Session State
• Record State
Screen State
• GUI
• ex.) label.text, imageView.image
Presentation State
• Screen State 

Screen State Session State
• Screen State Session State
• ex.) presenter.labelText, presenter.iconImage, presenter.favState



Twitter 

on/off (Screen State) 

(Session/Record State)
Session State
• Record State
• Record State
• ex.) API/DB
Record State
•
•
• ex.) Realm API
GUI
•
•
Clean Architecture State
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
Clean Architecture GUI 

Clean Architecture State
View
ViewController
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
GUI ViewController View 

Screen State
View
ViewController
Clean Architecture State
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
View UseCase Presenter/ViewModel 

Presentation State
View
ViewController
Clean Architecture State
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
UseCase Repository Data Layer 

Data Layer Session State
View
ViewController
Clean Architecture State
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
DB Record State 

API DB DB
View
ViewController
Clean Architecture State
Presenter ViewModel


UseCase Repository APIClient DBClient
MVC, MVP, MVVM GUI 

Screen State State
View ViewController
GUI
Screen State 

GUI
Presenter
ViewModel
UseCase
Repository
APIClient
DBClient
Presentation Layer Domain Layer Data Layer
View
ViewController


Fat
GUI
APIClient
DBClientView
ViewController
Screen/Presentation State Session/Record State b
ModelView(Controller)
(Cocoa) MVC
Twitter 

Presentation State Screen State
MVP(Supervising Controller)
View Model
Presenter
Session/Record 

View
MVP(Supervising Controller)
View Model
Presenter
Screen State Presentation State 

MVP(Passive View)
View ModelPresenter
GUI
• 

•
• 2 4
• 

GUI
• 

• 

2019/01/10 in FiNC

App Client Melting Pod #1
2019/01/15 in pixiv Inc.

iOS

2つの同期 4つの状態 #roppongiswift