104
REST-SOA-Controller-View: Проектирование обмена данными Егор Тафланиди 19/03/2016 et@redmadrobot.com

"REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Embed Size (px)

Citation preview

Page 1: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

REST-SOA-Controller-View: Проектирование обмена данными

Егор Тафланиди19/03/[email protected]

Page 2: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

01

Page 3: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

02

Опрос аудитории

Page 4: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

03

Польза

Page 5: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

04

Page 6: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

04

Page 7: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

- Domain-Specific Language

- DSL-интерфейс

- Обмен модельными объектами

Слои

05

СВОЙСТВА

Entity• id { get set }

/* no logic */

Page 8: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

06

Entity• id { get set }!

Page 9: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

- База данных

Сервер

07

СТРУКТУРА

Table: Userid name surname1 Иван Иванов2 Сидор Сидоров

Page 10: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

- База данных

Сервер

07

СТРУКТУРА

Table: Username surnameИван ИвановСидор Сидоров

id12

Page 11: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

- База данных

Сервер

08

СТРУКТУРА

Table: Username surnameИван ИвановСидор Сидоров

id12

=>

User• id • name • surname

Page 12: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

- ORM вычитывает объект из базы

- DAO транслирует ORM-объект в POJO

Сервер

09

СТРУКТУРА: ПУТЕШЕСТВИЕ ENTITY

User• id • name • surname

ORMDatabase DAO

ORM Object

BusinessLogic

Object

Page 13: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Сервер

10

User• id • name • surname

BusinessLogic Serialiser

Object

Transport

DT Object

- ORM вычитывает объект из базы

- DAO транслирует ORM-объект в POJO

- Бизнес-логика транслирует POJO в DTO

СТРУКТУРА: ПУТЕШЕСТВИЕ ENTITY

Page 14: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Сервер

11

User• id • name • surname

Transport HTTP

JSON

MobileApp

JSON

- ORM вычитывает объект из базы

- DAO транслирует ORM-объект в POJO

- Бизнес-логика транслирует POJO в DTO

- Транспорт транслирует DTO в JSON

- JSON передаётся на фронт

СТРУКТУРА: ПУТЕШЕСТВИЕ ENTITY

Page 15: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Сервер

12

СТРУКТУРА: TYPE STACK

User

ORMDatabase

DAO

BusinessLogic

Serialiser

Transport

Product

ORMDatabase

DAO

BusinessLogic

Serialiser

Transport

Message

ORMDatabase

DAO

BusinessLogic

Serialiser

Transport

Page 16: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Сервер

13

СЕРВИСЫ

User

Product

Message

} НаборWeb-сервисов

Page 17: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ПротоколREST

Page 18: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Протокол

15

RESOURCE

Resource R is a temporally varying membership

function MR(t), which for time t 

maps to a set of entities

/ Representational State Transfer, dissertation /http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Page 19: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Протокол

16

ENTITY & URL ENDPOINT

/entities(resource)

Array(Entity)

Entity• id { get set }

Page 20: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Протокол

16

ENTITY & WEB SERVICE

: REntity

POST /entities

GET /entities

GET /entities/{id}

PATCH /entities/{id}

DELETE /entities/{id}

/entities(resource)

Entity• id { get set }

Page 21: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Протокол

17

C.R.U.D.

POST /entities

GET /entities

GET /entities/{id}

PATCH /entities/{id}

DELETE /entities/{id}

Create

Read

Update

Delete

Entity• id { get set }∀

Page 22: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Протокол

18

ВЛОЖЕННОСТЬ. ДОВЕРИЕ К СЕРВЕРУ

User• id: Long • name: String

PATCH /users/{id}/nameUser• id: Long • name: String

/* name patched */

Page 23: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

19

Page 24: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

20

Мобильное приложениеSDK MVC

Page 25: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Мобильное приложение

- Тип данных = ключевая сущность

- Разница в логике = набор полей

21

SERVICE-ORIENTED ARCHITECTURE

Entity

ORMDatabase

DAO

BusinessLogic

Serialiser

Transport

Page 26: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

SERVICE

Page 27: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICE

TRANSPORT

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

Page 28: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICE

TRANSPORT

SERIALIZERPARSER

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

Page 29: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICE

TRANSPORT

SERIALIZERPARSER

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

Page 30: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICE

DATABASE

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

DAO

Page 31: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

SERVICESERVICE SERVICE

Page 32: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICESERVICE SERVICE

SERVICE LAYER

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

Page 33: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

SERVICESERVICE SERVICE

SERVICE LAYER

Мобильное приложениеSERVICE-ORIENTED ARCHITECTURE

CONTROLLER

Page 34: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

23

Интерлюдия: многопоточностьCALLBACK HELL

Page 35: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Callback Hell

24

Page 36: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

Callback Hell

Page 37: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

CONTROLLER

Callback Hell

Page 38: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

CONTROLLER SERVICE

Callback Hell

Page 39: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

CONTROLLER SERVICE SERIALIZER

Callback Hell

Page 40: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE

Callback Hell

Page 41: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T1

T2

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT

Callback Hell

Page 42: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT

Callback Hell

Page 43: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT PARSER

Callback Hell

Page 44: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT PARSER

Callback Hell

Page 45: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT DBPARSER

Callback Hell

Page 46: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT DBPARSER

Callback Hell

Page 47: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

CONTROLLER SERVICE SERIALIZER SERVICE TRANSPORT …PARSER DB

Callback Hell

Page 48: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

SERVICE TRANSPORT PARSER DBSERVICE SERVICE SERVICE

Callback Hell

Page 49: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

T3

T4

SERVICE TRANSPORT PARSER DBSERVICE SERVICE SERVICE

RESULT

Callback Hell

Page 50: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

SERVICE PARSERSERVICE SERVICE DB SERVICE …TRANSPORT

Callback Hell

Page 51: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

T2

T1

SERVICE PARSERSERVICE SERVICE DB SERVICE …TRANSPORT

OPERATION

Callback Hell

Page 52: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Operation

25

id result = transport.obtain(parameters)

id object = parser.parse(result)

db.save(object)

return object

Page 53: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Operation

26

dispatch_async(background_queue, ^{

id result = transport.obtain(parameters)

id object = parser.parse(result)

db.save(object)

dispatch_async(main_queue, ^{

completionBlock(object)

})

})

Page 54: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Operation

27

– (void)main {

id result = transport.obtain(parameters)

id object = parser.parse(result)

db.save(object)

completionBlock(object)

}

@interface Operation : NSOperation…@implementation Operation

Page 55: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Агенда

- Опрос аудитории

- Слои

- Сервер

- Протокол

- Мобильное приложение

- Пример

28

Page 56: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

00

ПримерSERVICE LAYER

Page 57: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

01

Transport

Page 58: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

02

Transport

- CRUD ~ URL endpoint + HTTP method + parameters

- ~ Web service base URL

- Семафор в качестве «выпрямителя» потоков

SYNCHRONOUS

Page 59: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

03

/**Операция«Получитьколлекциюсущностей».Пример:

GEThttp://api.customer.com/v1/entitites$headers

@paramparameters-параметрызапроса.@seeTransportationParameters

@returnВозвращаетрезультатвыполненияоперации.*/-(TransportationResult*)obtainAllWithParameters:(TransportationParameters*)parameters;

TransportSYNCHRONOUS

Page 60: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

03

/**Операция«Обновитьзначениесвойствасущности».Пример:

PATCHhttp://api.customer.com/v1/entitites/{entityId}/{property}$headers{$body_parameters}

@paramentityId-идентификаторсущности;@paramproperty-названиесвойствасущности;@paramparameters-параметрызапроса.@seeTransportationParameters

@returnВозвращаетрезультатвыполненияоперации.*/

-(TransportationResult*)updateWithId:(NSString*)entityIdproperty:(NSString*)propertyparameters:(TransportationParameters*)parameters;

TransportSYNCHRONOUS

Page 61: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

04

Parser

Page 62: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

05

Parser

- Наличие объекта = наличие всех его обязательных полей

- Для пользователя ошибки «парсер не смог распознать данные» и «данные не пришли» будут иметь одинаковые последствия

- Не стоит городить непробиваемую «оборону»

- Приложению нужны объекты, а не топология

BLIND

Page 63: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

06

ParserBLIND

@interfaceParser<__covariantEntity>:NSObject-(NSArray*)parseAll:(id)json;

-(BOOL)parsable:(NSDictionary*)json;-(Class)objectClass;-(NSDictionary*)mapping;-(Entity)sanitize:(Entity)object;-(Entity)fulfill:(Entity)objectfrom:(NSDictionary*)json;@end

Page 64: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

07

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Entity• id • text • note

Page 65: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

08

ParserEXAMPLE

@interfaceParser<__covariantEntity>:NSObject-(NSArray*)parseAll:(id)json;

-(BOOL)parsable:(NSDictionary*)json;-(Class)objectClass;-(NSDictionary*)mapping;-(Entity)sanitize:(Entity)object;-(Entity)fulfill:(Entity)objectfrom:(NSDictionary*)json;@end

Page 66: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

09

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 67: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

10

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 68: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

11

ParserEXAMPLE

@interfaceParser<__covariantEntity>:NSObject-(NSArray*)parseAll:(id)json;

-(BOOL)parsable:(NSDictionary*)json;-(Class)objectClass;-(NSDictionary*)mapping;-(Entity)sanitize:(Entity)object;-(Entity)fulfill:(Entity)objectfrom:(NSDictionary*)json;@end

Page 69: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseable:

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 70: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseable:

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 71: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseable:

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 72: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 73: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 74: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseAll:

Page 75: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseAll:

Page 76: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseable:

Page 77: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

12

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseable:

Page 78: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

13

ParserEXAMPLE

@interfaceParser<__covariantEntity>:NSObject-(NSArray*)parseAll:(id)json;

-(BOOL)parsable:(NSDictionary*)json;-(Class)objectClass;-(NSDictionary*)mapping;-(Entity)sanitize:(Entity)object;-(Entity)fulfill:(Entity)objectfrom:(NSDictionary*)json;@end

Page 79: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseable:Entity• id = "3" • text = "annotation" • note = nil

Page 80: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Entity• id = "3" • text = "annotation" • note = nil

– sanitize:

Page 81: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Entity• id = "3" • text = "annotation" • note = nil

– sanitize:

Page 82: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Entity• id = 3 • text = "annotation" • note = nil

– sanitize:

Page 83: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

14

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Entity• id = 3 • text = "annotation" • note = nil

– fulfill:

Page 84: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

15

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 85: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

– parseAll:

15

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 86: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

15

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

– parseAll:

Page 87: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

15

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

Page 88: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

15

ParserEXAMPLE{"id":1,"dict":{"id":"3","text":"annotation"},"array":[{"id":4,"text":"description","note":"FYI"}]}

=> [Entity]

Page 89: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

16

DAOШАБЛОН ПРОЕКТИРОВАНИЯ

Page 90: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

17

DAO

- Взаимодействие с DAO посредством модельных объектов (Entity : NSObject) => изоляция

- Инжектируемость- Потокобезопасность

- «Соединение» с базой данных- Транзакционность

ИДЕОЛОГИЯ

Page 91: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

18

DAO

- persist(Entity) -> BOOL

- persistAll(Array<Entity>) -> BOOL

- read(ID) -> Entity

- readAll() -> Array<Entity>

- erase(ID) -> BOOL

- eraseAll() -> BOOL

ИНТЕРФЕЙС

Page 92: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

19

Entity TranslatorШАБЛОН ПРОЕКТИРОВАНИЯ

Page 93: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

20

Entity Translator

Entity• id • text • note

=><=

{"id":4,"text":"description","note":"FYI"}

EntityDTO : NSDictionary

Page 94: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

20

Entity Translator

Entity• id • text • note

=><=

ORMEntity• id • text • note

Page 95: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

21

DAO TRANSLATOREntity Translator

@interfaceRealmTranslator:NSObject

-(RLMEntry*)toEntry:(id<Persistable>)entity;

-(id<Persistable>)toEntity:(RLMEntry*)entry;

-(NSString*)entryClass;

@end

Page 96: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

22

DAO TRANSLATOREntity Translator

{

letdao:DAO=RealmDAO(translator:translator)

}

Page 97: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

23

Entity TranslatorКОДОГЕНЕРАЦИЯ

Page 98: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

24

Entity TranslatorКОДОГЕНЕРАЦИЯ

/**Последняятранзакция.

@jsonlast_transaction@mandatory@realmlastTransaction*/@property(…)Transaction*lastTransaction;

Page 99: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

25

Service

Page 100: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

26

Service

- Инстанциирование утилит (?)

- Набор виртуальных конструкторов

- Координация данных между утилитами

- Многопоточность, инстанциирование операций

- Асинхронный интерфейс для верхнего слоя UI

ОТВЕТСТВЕННОСТЬ

Page 101: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

27

Service LayerИНВЕРТЕР ЗАВИСИМОСТЕЙ

Page 102: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

28

Service Layer

- Инстанциирование сервисов

- Инжектирование сервисов

- Инжектирование очередей запросов

ОТВЕТСТВЕННОСТЬ

Page 103: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

Итоги

- REST

- SOA

- Многопоточность = зло

- Пример реализации сервисного уровня

Page 104: "REST-SOA-View-Controller или Проектирование сервис-ориентированной системы сервер/мобильное приложение" Егор

ВОПРОСЫ ЕСТЬ?ВОПРОСОВ НЕТ!

Егор Тафланиди[email protected]