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

͋Γ͕ͱ͏͍͟͝·ͨ͠