Yet another architectur. Как устроены приложения SuperJob изнутри
-
Upload
denisenko-sergey -
Category
Technology
-
view
166 -
download
3
Transcript of Yet another architectur. Как устроены приложения SuperJob изнутри
Yet another architecture Как устроены приложения SuperJob изнутри
Токарев Сергей, старший IOS-разработчик [email protected]
Приложения SuperJob
Поиск работы Superjob
Superjob HR: поиск сотрудников
Производственный календарь
[ObjC] [Swift]
Objectionhttp://objection-framework.org
//инициализация objection- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { JSObjectionInjector *injector = [JSObjection createInjector]; [JSObjection setDefaultInjector:injector];}
Objection в действии@interface Facade ()@property (nonatomic, strong) APIAdapter *apiAdapter;@end
@implementation Facadeobjection_requires(@"apiAdapter")
Adapter
Получение данных из источника ФайлБДAPI
Приведение ошибок к NSError Серверные валидацииАвторизация и т.д.
интерфейс Adaptertypedef NS_ENUM(NSUInteger, APIAdapterSubscriptionsErrorCode) { APIAdapterSubscriptionsErrorCodeAuthorization, APIAdapterSubscriptionsErrorCodeDelete,};
@interface APIAdapter
/** Список подписок
@param @[@"count" : @10] @return RACTuple<NSArray <NSDictionary *>*rawData, NSNumber *count> */- (RACSignal *)subscriptionsListWithParams:(NSDictionary *)params;
FacadeВыбор источника данных
Преобразование полученных данных из адаптера в модели
Пользователь авторизован
FileAdapter
json subscribtionsModel
ApiAdapter
интерфейс Facade@interface Facade
** Список подписок
@param @[@"count" : @10] @return RACTuple<NSArray<SubscriptionModel *> *model, NSNumber *count> */- (RACSignal *)subscriptionsListWithType:(NSDictionary *)params;
ViewModel
Формирует элементы для отображения в ячейке
Формирует секции из элементов
Реализует бизнес-логику
интерфейс ViewModel/**Количество секций@return количество секций*/- (NSUInteger)sectionsCount;**
Получить секцию по индексу@return sectionItem*/(id<TableViewSectionProtocol>)sectionAtIndex:(NSInteger)section;/** Элемент секции по индексу@return viewItem*/- (__kindof id<TableViewItem>)itemAtIndexPath:(NSIndexPath *)indexPath;
• модульность;
• тестируемость;
• удобство разработки и понимания структуры;
Что мы получили в итоге
• модульность;
• тестируемость;
• удобство разработки и понимания структуры;
• возможность распараллелить работу разработчиков
Что мы получили в итоге