Anonymous
у рамблера есть хороший пример с кодом на вайпере, воот
Paks
я всегда в синглтоне держу набор методов с запросами к серверу. и когда что-то надо получить - довольно удобно просто обратиться и получить колеком нужные данные. Такой подход плох чем-то?
Anonymous
Anonymous
сильная связность
Paks
а в чем связность? Там по сути просто набор методов и блоки на ответ success или failure
Paks
юзаются где угодно и из любой точки, удобно и ни к чему не привязывается никак.
Anonymous
это значит, что у тебя в коде бизнес-логики торчит какая-то сущность. И в случае, если что нужно будет изменить, например, реализации методов, параметры там, может какие-то типы внутри или фреймворк, на основе которого работают методы, придется по всему коду исправлять эти вызовы с функциями внутри
Anonymous
ой
Anonymous
переменными в вызовах
Anonymous
в скобочках
Anonymous
в gang of four порицаются синглтоны
Anonymous
возможно! если ты на вход подаешь только сущность и на выходе сущность, то в принципе ок
Anonymous
а, ну и вот еще
Anonymous
я не уверен, но для тестирования это тожэ не очень удобно будет. Типа, если бы использовался DI, можно было бы сразу подставить какой-нибудь заготовленный репозиторий, удовлетворяющий общему протоколу, в одной точке приложения
Anonymous
вооот
Anonymous
ну и еще там немного много принципы solid нарушаются
Paks
параметры все передают просто словарем.
выглядит прибл так
+(instatype)sharedInstance;
- (void)getUserByParameters:(NSDictionary *)parameters success:(myBlockSucCallback)successCallback failure:(myBlockFailCallback)failureCallback;
Их норм юзать в синглтоне?
Paks
в этом синглтоне ничего не обрабатываю, кроме: ошибка или удача, и возвращаю результат, который обрабатывается уже тем, кому этот результат нужен
Paks
или лучше синглтон перепесывать на простой класс и постоянно его в каждом контроллере иницилазировать?
Paks
перед каждым вызовом?)
Anonymous
Anton
Anton
этож фабрика, нет?
Paks
ну инициализируется он так:
#pragma mark - Initialization
+ (PApiClient *)sharedClient {
static PApiClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kBaseURLString]];
});
return _sharedClient;
}
Anonymous
ну да, синглтон
Anonymous
Anton
получать разные сущности вызовом чего либо, не фабрика?
Anonymous
в общем практика эта рабочая с синглтоном-репозиторием, но она не слишком способствует расширяемости, нарушает несколько принципов чистого кода и ухудшает модульную тестируемость
Anonymous
зато быстро!)
Stanislav
А как правильно-то
Paks
но этот синглтон всего лишь возвращает то, что сервер присылает, в виде словаря и все) больше никаких действий не выполняет
Stanislav
А то столько умных слов, принципов, моделей, фабрик
Anton
Anton
а так подход правильный
Anonymous
ааа, чай забыл
Anton
можно инкапсулировать сущности использущие данный "синглтон" за отдельными классами и будет вам счастье
Anonymous
Anton
Шаблоны проектирования на русском:
https://nixsolutions.github.io/design-patterns/
Anton
или книга от банды четырех
Anton
Паттерны проектирования
Anton
самих стандартов не существует
Anton
есть только гайды и стайл-гайды
Anton
на проектирование
Anton
НЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕСА
Anonymous
Anton
Боб Мартин "Чистый код"
Anonymous
архитектура viper хорошо реализует solid . Там еще пример проекта есть
Anonymous
Anton
а если есть куча времени - можно пойти по хардкору и проникнуться стандартами JEE
Anton
после которых либо сходишь сума, либо начинаешь думать наперед
Anonymous
еще советую почитать про анти-паттерн massive controller
Alexander
Ребята, планирую делать встроенные покупки внутри приложения, обязательно ли делать какую то авторизацию для пользователя на своем серваке? Или восстановление покупок можно делать как то по идентификации через apple id клиента ..?
Stanislav
Stanislav
А так и покупки и восстановление можно сделать полностью без своего сервера
Stanislav
Если, конечно, у тебя покупки не привязаны как-то к профилю пользователя на твоем сервере
Stanislav
Alexander
Stanislav
Alexander
«тебе прилетают» - мне это приложению?
Stanislav
При восстановлении точно так же прилетают транзакции, смотришь, что это было, открываешь доступ
Stanislav
да
Alexander
А как сервак эплов определяет что мне отправлять? как идентфицирует7
Stanislav
На нем покупки привязаны к Apple ID
Stanislav
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/DeliverProduct.html#//apple_ref/doc/uid/TP40008267-CH5-SW3
Stanislav
Есть метод
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Stanislav
Вот туда они и прилетают после обработки серверами Apple
Stanislav
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
break;
а вот и обработка новой и восстановленной транзакции (по сути в completeTransaction и в restoreTransaction может быть один и тот же код, открывающий юзеру какие-то плюшки)
Alexander
Zafar
Ребят подскажите туториал нормальный по snapKit. У них на сайте очень кратко. У меня возникает ошибка: Я в superview добавляю два subview: headerview и footerview. Однако как я понимаю , make.top.equalTo(headerView.snp_bottom) не подцепляет нижнию границу headerview и расширяется на весь экран. Поэтому я не могу поймать target-ы кнопок
Zafar
от headerView
Zafar
Как бы footerView перекрывает headerView
Zafar
хотя , визуально на месте все. Я побаловался бэкрангд колор, чтобы поймать это
Anonymous
снепкит
Anonymous
нуу нууу
Anonymous
мм