×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
/BPUP,BOFLP 3FQPTJUPSZ QBUUFSOJO4XJGU
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
ϦϙδτϦύλʔϯ w ϦϙδτϦͱɺσʔλͷऔಘɺอଘɺআͷͨΊ ͷΠϯλʔϑΣΠε w ϦϙδτϦΛͬͯσʔλʹΞΫηε͢Δɻ w ϝϞϦɺ3FBMNɺ"1*ͱ͍ͬͨόοΫΤϯυΛ Δඞཁ͕ͳ͘ͳΔɻ
Slide 4
Slide 4 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository query model params JSON NSPredicate RealmObject
Slide 5
Slide 5 text
JO4XJGU protocol RecipeRepository { func find(id: UInt) -> Recipe? func findAll(query: Query, sort: Sort) -> [Recipe] func save(recipes: [Recipe]) -> Recipe? func delete(recipes: [Recipe]) -> Recipe? }
Slide 6
Slide 6 text
JO4XJGU class MemoryRecipeRepository: RecipeRepository { let recipes = [ Recipe(id: 1, name: “…”), Recipe(id: 2, name: “…”), Recipe(id: 3, name: “…”), ] func find(id: UInt) -> Recipe? { recipes.filter { $0.id == id }.first } }
Slide 7
Slide 7 text
w σʔλͷΞΫηε͍͍ͩͨඇಉظ w ΫΤϦιʔτͲ͏ͬͯࢦఆ͢Δͷ͔ w 3FDJQF3FQPTJUPSZ $IFG3FQPTJUPSZ 6TFS3FQPTJUPSZʜͱࣅͨΑ͏ͳίʔυΛίϐϖ ͢Δ͜ͱʹͳΓͦ͏
Slide 8
Slide 8 text
ϦϙδτϦͰඇಉظॲཧΛ ͔͋ͭ͏
Slide 9
Slide 9 text
1SPNJTF protocol RecipeRepository { func find(id: UInt) -> Task func findAll(query: Query, sort: Sort) -> Task func save(recipes: [Recipe]) -> Task func delete(recipes: [Recipe]) -> Task }
Slide 10
Slide 10 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository query model params JSON NSPredicate RealmObject
Slide 11
Slide 11 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository Task params JSON NSPredicate RealmObject query
Slide 12
Slide 12 text
൚༻తͳΫΤϦΛఆٛ͢Δ
Slide 13
Slide 13 text
OBPUZ"OZ2VFSZ let query = AnyQuery.Equal(key: “name”, value: “naoty”) query.predicate //=> NSPredicate(format: "name == ‘naoty’") query.dictionary //=> ["name": “naoty”] let sort = AnySort.Ascending(key: “id”) sort.sortDescriptors //=> [NSSortDescriptor(key: "id", ascending: true)] sort.dictionary //=> ["sort": ["id"]]
Slide 14
Slide 14 text
OBPUZ"OZ2VFSZ protocol RecipeRepository { func find(id: UInt) -> Task func findAll(query: AnyQuery, sort: AnySort) -> Task func save(recipes: [Recipe]) -> Task func delete(recipes: [Recipe]) -> Task }
Slide 15
Slide 15 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository Task params JSON NSPredicate RealmObject query
Slide 16
Slide 16 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository Task [String: AnyObject] JSON NSPredicate RealmObject AnyQuery
Slide 17
Slide 17 text
൚༻తͳϦϙδτϦܕ Λఆٛ͢Δ
Slide 18
Slide 18 text
͜ΕͰ͖ͳ͍ protocol Repository { associatedtype Domain func find(id: Uint) -> Task } let repository: Repository = MemoryRecipeRepository()
Slide 19
Slide 19 text
ܕফڈ struct AnyRepository: Repository { let _find: (id: UInt) -> Task init(_ repository: T) { _find = repository.find } func find(id: UInt) -> Task { return _find(id) } } let repository = AnyRepository(MemoryRecipeRepository()) // repository: AnyRepository
Slide 20
Slide 20 text
ViewController RecipeRepository WebAPIRecipeRepository RealmRecipeRepository Task [String: AnyObject] JSON NSPredicate RealmObject AnyQuery
Slide 21
Slide 21 text
ViewController AnyRepository WebAPIRecipeRepository RealmRecipeRepository Task [String: AnyObject] JSON NSPredicate RealmObject AnyQuery
Slide 22
Slide 22 text
࣮ྫ w IUUQTHJUIVCDPNOBPUZ1MBZHSPVOE USFFNBTUFS3FQPTJUPSZ
Slide 23
Slide 23 text
Ԡ༻ྫΩϟογϡ
Slide 24
Slide 24 text
Ωϟογϡ w ϦϙδτϦ͔Βऔಘͨ݁͠ՌΛΩϟογϡ͍ͨ͠ɻ w Ωϟογϡʹͳ͚ΕผͷϦϙδτϦ͔Βऔಘͯ͠ɺ Ωϟογϡʹอଘ্ͨ͠Ͱฦ͢ɻ w Ωϟογϡʹ͋Εฦ͢ɻ w ྫϩάΠϯϢʔβʔͷऔಘͳͲ
Slide 25
Slide 25 text
͋Γ͕ͱ͏͍͟͝·ͨ͠