SlideShare une entreprise Scribd logo
1  sur  110
Télécharger pour lire hors ligne
PODRÓŻE W CZASIE Z
ARCHITEKTURĄ REDUX
ELIASZ SAWICKI
‣ Blog: www.eliaszsawicki.com
‣ Twitter: @EliSawic
REDUX
‣ Skąd i po co?
‣ Jak to działa?
‣ Przemyślenia
SKĄD I PO CO?
CZEGO UŻYĆ?
REACT
KOMPONENTY
FLUX
FLUX
Flux is the application architecture that Facebook uses for
building client-side web applications. It complements React's
composable view components by utilizing a unidirectional
data flow. It's more of a pattern rather than a formal
framework, and you can start using Flux immediately without a
lot of new code.
FLUX
‣ application architecture
‣ unidirectional data flow
‣ pattern
‣ without a lot of new code
DAN ABRAMOV
FRUSTRACJA
▸ Frustracja (łac. frustratio - zawód, udaremnienie) – zespół
przykrych emocji związanych z niemożliwością realizacji
potrzeby lub osiągnięcia określonego celu.
▸ np. Gdy kolejny raz odtwarzasz stan aplikacji podczas pracy
nad nową funkcjonalnością
DEV TOOLS
TIME TRAVEL
RECORDING
HOT RELOADING
FLUX
NIE DO KOŃCA
WSPIERAŁ
REDUX
RESWIFT
DUŻO ZALEŻY OD
PLATFORMY
SKĄD I PO CO?
‣ wyszedł ze świata webowego
‣ inspirowany Fluxem
‣ oparty na chęci szybszej
iteracji
‣ dużo zależy od platformy
‣ podejście
JAK TO DZIAŁA?
WYOBRAŹMY TO SOBIE
URZĄD SKARBOWY
EXCEL
WYSŁAĆ LIST
POPROSIĆ
KSIĘGOWEGO
URZĄD SKARBOWY
ODBIERA
PRZEKAZUJE DO
URZĘDNIKA
URZĘDNIK
AKTUALIZUJE
AKTA
AKTUALIZUJE
AKTA
FIRMY
DOSTAJEMY
INFORMACJĘ
ZWROTNĄ
AKTUALIZACJA
EXCELA
EXCEL
LIST
URZĄD SKARBOWY
URZĘDNIK
URZĘDNIK
STAN
STAN
REDUX
GŁÓWNE ELEMENTY
‣ State
‣ Actions
‣ Reducers
‣ Store
STATE
STATE
PROSTY STAN
struct CompanyState {
var isTaxPaidOnTime: Bool
}
STAN APLIKACJI SKŁADA SIĘ Z PODSTANÓW
struct ApplicationState {
var companyState: CompanyState
var loginState: LoginState
var user: User
var navigationState: NavigationState
}
VIEW
STATE
ACTIONS
AKCJA NIOSĄCA DANE
struct ChangeTaxPaymentStatus: Action {
let isPaid: Bool
}
AKCJA OPARTA NA TYPIE
struct IncreaseCounter: Action {}
VIEW
ACTION
STATE
ACTION CREATORS
TWORZENIE AKCJI
func updateAccount() {
getTaxInfo(completion: { tax in
store.dispatch(ChangeTaxPaymentStatus(isPaid: tax.isPaid))
})
}
STORE
ODBIERA LISTY
ZARZĄDZA ZMIANAMI
INFORMUJE O
ZMIANACH
INFORMACJE O ZMIANIE
protocol Store {
func subscribe(subscriber: Subscriber)
}
WYSYŁANIE LISTÓW
protocol Store {
func subscribe(subscriber: Subscriber)
func dispatch(action: Action)
}
TWORZENIE STORE’A
protocol Store {
func subscribe(subscriber: Subscriber)
func dispatch(action: Action)
init(urzędnicy: Urzędnicy, state: State)
}
TWORZENIE STORE’A
protocol Store {
func subscribe(subscriber: Subscriber)
func dispatch(action: Action)
init(reducer: Reducer, state: State)
}
VIEW
ACTION
STORE
STATE
STATE
REDUCER
REDUCER
(Action, State?) -> State
REDUCER APLIKACJI
func appReducer(action: Action, state: AppState?) -> AppState {
return AppState(
companyState: companyReducer(action, user: state?.companyState),
navState: navReducer(action, navState: state?.navState)
)
}
REDUCER PODSTANU
func companyReducer(action: Action, company: CompanyState?) -> CompanyState
{
var resultCompany = company ?? CompanyState()
switch action {
case let action as ChangeTaxPaymentStatus:
resultCompany.isTaxPaidOnTime = action.isPaid
}
return resultCompany
}
REDUCER + FLUXREDUX
VIEW
ACTION
STORE
REDUCER
REDUCER
STATE
STATE
TO NIE WSZYSTKO
STORE APLIKACJI
let mainStore = Store<AppState>(reducer: counterReducer, state: nil)
SUBSCRIBE
class CounterViewController: UIViewController, StoreSubscriber {
override func viewWillAppear(_ animated: Bool) {
mainStore.subscribe(self)
}
override func viewWillDisappear(_ animated: Bool) {
mainStore.unsubscribe(self)
}
}
NEW STATE
class CounterViewController: UIViewController, StoreSubscriber {
func newState(state: AppState) {
...
}
}
DISPATCH ACTION
class CounterViewController: UIViewController, StoreSubscriber {
@IBAction func upButtonTapped(_ sender: UIButton) {
mainStore.dispatch(CounterIncrease())
}
@IBAction func downButtonTapped(_ sender: UIButton) {
mainStore.dispatch(CounterDecrease())
}
}
PROSTE AKCJE
struct CounterIncrease: Action {}
struct CounterDecrease: Action {}
ACTION CREATOR
struct CounterSetValue: Action {
var value: Int
}
func setCounterValue() {
countRepository.getCount { count in
store.dispatch(CounterSetValue(value: count))
}
}
REDUCER
func counterReducer(action: Action, state: AppState?) -> AppState {
var state = state ?? AppState()
switch action {
case _ as CounterIncrease:
state.counter += 1
case _ as CounterDecrease:
state.counter -= 1
case let valueAction as CounterSetValue:
state.counter = valueAction.value
default:
break
}
return state
}
REAKCJA NA ZMIANE
class CounterViewController: UIViewController, StoreSubscriber {
func newState(state: AppState) {
counterLabel.text = "Counter: (state.counter)"
}
}
GŁÓWNE ELEMENTY
‣ State
‣ Actions
‣ Reducers
‣ Store
MOJE
PRZEMYŚLENIA
WARTO?
ZALEŻY
POZNAWAJMY INNE
PODEJŚCIA
UNIDIRECTIONAL
DATA
FLOW
AKCJE NIE POSIADAJĄ
CALLBACKÓW
UNIKAJMY
CYKLI
ZDARZEŃ
ROOT A B
ROOT A B
JEDNO
ŹRÓDŁO
PRAWDY
PRZECHOWYWANIE STANU
class ComponentA {
var state: State?
var componentB: ComponentB
func applyState(state: State) {
self.state = state
componentB.applyState(state)
}
}
class ComponentB {
var state: State?
func applyState(state: State) {
self.state = state
}
}
USTAWIANIE STANU
class ComponentA {
var componentB: ComponentB
func applyState(state: State) {
componentB.applyState(state)
}
}
class ComponentB {
func applyState(state: State) {
}
}
STATE MANAGER
STANDARDY
NIE SĄ
ZŁE
WYKONANIE ZADANIA?
ACTION CREATOR
ZMIANA STANU
REDUCER
GDZIE JEST STAN?
STORE
UŁATWIA PRACĘ
DESIGN
FOR
ITERATION
DEV TOOLS
ŁATWY DOSTĘP
DO EKRANÓW,
NAD KTÓRYMI
PRACUJEMY
PRZYGOTOWANE
ODPOWIEDZI
FAKE REQUEST
WIREMOCK
UNIT TESTY
SNAPSHOT TESTY
IOS
SNAPSHOT
TESTCASE
PRZEMYŚLENIA
‣ unidirectional data flow
‣ jedno źródło prawdy
‣ standardy nie są złe
‣ design for iteration
ZAWSZE
JEST
INNA DROGA

Contenu connexe

Similaire à Redux - 4Developers

[@NaukriEngineering] Flux Architecture
[@NaukriEngineering] Flux Architecture[@NaukriEngineering] Flux Architecture
[@NaukriEngineering] Flux ArchitectureNaukri.com
 
Unidirectional Data Flow Architecture (Redux) in Swift
Unidirectional Data Flow Architecture (Redux) in SwiftUnidirectional Data Flow Architecture (Redux) in Swift
Unidirectional Data Flow Architecture (Redux) in SwiftSeyhun AKYUREK
 
Introduction to React for Frontend Developers
Introduction to React for Frontend DevelopersIntroduction to React for Frontend Developers
Introduction to React for Frontend DevelopersSergio Nakamura
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)Chiew Carol
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionJenya Terpil
 
Introducing Vuex in your project
Introducing Vuex in your projectIntroducing Vuex in your project
Introducing Vuex in your projectDenny Biasiolli
 
State manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to VuexState manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to VuexCommit University
 
Enterprise State Management with NGRX/platform
Enterprise State Management with NGRX/platformEnterprise State Management with NGRX/platform
Enterprise State Management with NGRX/platformIlia Idakiev
 
Introduction to ReactJS and Redux
Introduction to ReactJS and ReduxIntroduction to ReactJS and Redux
Introduction to ReactJS and ReduxBoris Dinkevich
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJSDaine Mawer
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тягаVitebsk Miniq
 
downloads_introduction to redux.pptx
downloads_introduction to redux.pptxdownloads_introduction to redux.pptx
downloads_introduction to redux.pptxNavneetKumar111924
 
Redux training
Redux trainingRedux training
Redux trainingdasersoft
 
Maintaining sanity in a large redux app
Maintaining sanity in a large redux appMaintaining sanity in a large redux app
Maintaining sanity in a large redux appNitish Kumar
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionFDConf
 
Manage the Flux of your Web Application: Let's Redux
Manage the Flux of your Web Application: Let's ReduxManage the Flux of your Web Application: Let's Redux
Manage the Flux of your Web Application: Let's ReduxCommit University
 
Let's discover React and Redux with TypeScript
Let's discover React and Redux with TypeScriptLet's discover React and Redux with TypeScript
Let's discover React and Redux with TypeScriptMathieu Savy
 
React js programming concept
React js programming conceptReact js programming concept
React js programming conceptTariqul islam
 
redux and angular - up and running
redux and angular - up and runningredux and angular - up and running
redux and angular - up and runningNir Kaufman
 

Similaire à Redux - 4Developers (20)

[@NaukriEngineering] Flux Architecture
[@NaukriEngineering] Flux Architecture[@NaukriEngineering] Flux Architecture
[@NaukriEngineering] Flux Architecture
 
Unidirectional Data Flow Architecture (Redux) in Swift
Unidirectional Data Flow Architecture (Redux) in SwiftUnidirectional Data Flow Architecture (Redux) in Swift
Unidirectional Data Flow Architecture (Redux) in Swift
 
Introduction to React for Frontend Developers
Introduction to React for Frontend DevelopersIntroduction to React for Frontend Developers
Introduction to React for Frontend Developers
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Introducing Vuex in your project
Introducing Vuex in your projectIntroducing Vuex in your project
Introducing Vuex in your project
 
State manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to VuexState manager in Vue.js, from zero to Vuex
State manager in Vue.js, from zero to Vuex
 
Enterprise State Management with NGRX/platform
Enterprise State Management with NGRX/platformEnterprise State Management with NGRX/platform
Enterprise State Management with NGRX/platform
 
Introduction to ReactJS and Redux
Introduction to ReactJS and ReduxIntroduction to ReactJS and Redux
Introduction to ReactJS and Redux
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
 
Reactивная тяга
Reactивная тягаReactивная тяга
Reactивная тяга
 
downloads_introduction to redux.pptx
downloads_introduction to redux.pptxdownloads_introduction to redux.pptx
downloads_introduction to redux.pptx
 
Redux training
Redux trainingRedux training
Redux training
 
Maintaining sanity in a large redux app
Maintaining sanity in a large redux appMaintaining sanity in a large redux app
Maintaining sanity in a large redux app
 
Let's start with REDUX
Let's start with REDUXLet's start with REDUX
Let's start with REDUX
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Manage the Flux of your Web Application: Let's Redux
Manage the Flux of your Web Application: Let's ReduxManage the Flux of your Web Application: Let's Redux
Manage the Flux of your Web Application: Let's Redux
 
Let's discover React and Redux with TypeScript
Let's discover React and Redux with TypeScriptLet's discover React and Redux with TypeScript
Let's discover React and Redux with TypeScript
 
React js programming concept
React js programming conceptReact js programming concept
React js programming concept
 
redux and angular - up and running
redux and angular - up and runningredux and angular - up and running
redux and angular - up and running
 

Plus de Eliasz Sawicki

Eliasz sawickimeetupit
Eliasz sawickimeetupitEliasz sawickimeetupit
Eliasz sawickimeetupitEliasz Sawicki
 
Developing more in less time
Developing more in less timeDeveloping more in less time
Developing more in less timeEliasz Sawicki
 
The art-of-developing-more-in-less-time-berlin
The art-of-developing-more-in-less-time-berlinThe art-of-developing-more-in-less-time-berlin
The art-of-developing-more-in-less-time-berlinEliasz Sawicki
 
Introduction to react native
Introduction to react nativeIntroduction to react native
Introduction to react nativeEliasz Sawicki
 
Doing more in less time - Mobiconf
Doing more in less time - MobiconfDoing more in less time - Mobiconf
Doing more in less time - MobiconfEliasz Sawicki
 
Introduction To Functional Reactive Programming Poznan
Introduction To Functional Reactive Programming PoznanIntroduction To Functional Reactive Programming Poznan
Introduction To Functional Reactive Programming PoznanEliasz Sawicki
 
Introduction to Functional Reactive Programming
Introduction to Functional Reactive ProgrammingIntroduction to Functional Reactive Programming
Introduction to Functional Reactive ProgrammingEliasz Sawicki
 
Time traveling with ReSwift
Time traveling with ReSwiftTime traveling with ReSwift
Time traveling with ReSwiftEliasz Sawicki
 
ReSwift CocoaHeads Tricity
ReSwift CocoaHeads TricityReSwift CocoaHeads Tricity
ReSwift CocoaHeads TricityEliasz Sawicki
 
ReactiveCocoa workshop
ReactiveCocoa workshopReactiveCocoa workshop
ReactiveCocoa workshopEliasz Sawicki
 

Plus de Eliasz Sawicki (14)

Eliasz sawickimeetupit
Eliasz sawickimeetupitEliasz sawickimeetupit
Eliasz sawickimeetupit
 
Developing more in less time
Developing more in less timeDeveloping more in less time
Developing more in less time
 
The art-of-developing-more-in-less-time-berlin
The art-of-developing-more-in-less-time-berlinThe art-of-developing-more-in-less-time-berlin
The art-of-developing-more-in-less-time-berlin
 
Tech fest
Tech festTech fest
Tech fest
 
Introduction to react native
Introduction to react nativeIntroduction to react native
Introduction to react native
 
Doing more in less time - Mobiconf
Doing more in less time - MobiconfDoing more in less time - Mobiconf
Doing more in less time - Mobiconf
 
iOSCon
iOSConiOSCon
iOSCon
 
Code europe
Code europeCode europe
Code europe
 
Introduction To Functional Reactive Programming Poznan
Introduction To Functional Reactive Programming PoznanIntroduction To Functional Reactive Programming Poznan
Introduction To Functional Reactive Programming Poznan
 
Introduction to Functional Reactive Programming
Introduction to Functional Reactive ProgrammingIntroduction to Functional Reactive Programming
Introduction to Functional Reactive Programming
 
Time traveling with ReSwift
Time traveling with ReSwiftTime traveling with ReSwift
Time traveling with ReSwift
 
Calabash
CalabashCalabash
Calabash
 
ReSwift CocoaHeads Tricity
ReSwift CocoaHeads TricityReSwift CocoaHeads Tricity
ReSwift CocoaHeads Tricity
 
ReactiveCocoa workshop
ReactiveCocoa workshopReactiveCocoa workshop
ReactiveCocoa workshop
 

Dernier

FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRnishacall1
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceDelhi Call girls
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Pooja Nehwal
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceanilsa9823
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Niamh verma
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceanilsa9823
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...wyqazy
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7Pooja Nehwal
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPsychicRuben LoveSpells
 

Dernier (9)

FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
 

Redux - 4Developers