SlideShare a Scribd company logo
1 of 28
Download to read offline
Параметризация кода
Антон Сергеев, 2022
Преобразование
Что нас ждет
Сложности написания кода


Школьные уравнения с параметрами и фича флаги


Усложняем параметры с помощью ООП


Иерархия значений параметров


Реализация на современном Swift


Раздел, где я повторю все, что говорил в самом начале
Сложности написания кода
Типы деталей
• Наши


• Не наши
Школьные уравнения с
параметрами и фича флаги
Усложняем параметры


с помощью ООП
Как будем упрощать
• Делать методы и их количество меньше


• Уменьшать количество веток кода
Иерархия значений
параметров
Источники значений
• Переменные окружения (автоматическое тестирование)


• Дебаг меню (ручное тестирование)


• Меню пользователя


• Бэк


• Значения по умолчанию
Реализация на современном
Swift
Что хотим
• Простое использование


• Дебаг меню


• Поддержка иерархии значений


• Собственные параметры у каждого модуля


• Возможность разделять параметры между модулями


• Возможность передавать параметры по сети (энкодинг)
class MainSettings: Settings {


fileprivate static let shared = MainSettings()


@Flag.Internal var serverEnvironment = ServerEnvironment.release


@Section<DiskCacheSettings> var diskCacheSettings


@Flag.Internal var firebaseUpdateInterval = 43200.0


}
func flag<V>(_ keyPath: KeyPath<MainSettings, V>) -> V {


MainSettings.shared[keyPath: keyPath]


}
flag(.serverEnvironment).url
enum ServerEnvironment: String, CaseIterable, LosslessStringConvertible {


case release


case preStable


case test


case dev


var url: URL {


let urlString: String


switch self {


case .release:


urlString = "https://api.example.com"


case .preStable:


urlString = "https://pre-stable.api.example.com"


case .test:


urlString = "https://test.api.example.com"


case .dev:


urlString = "https://dev.api.example.com"


}


return URL(string: urlString)!


}


var description: String { rawValue }


init?(_ description: String) {


self.init(rawValue: description)


}


}
class DiskCacheSettings: Settings {


@Info<CacheSizeProvider> var cacheCurrentSize


@Action<ClearCacheCommand> var clearCache


@Flag var cacheSize = 1_000


@Flag var cacheImageSize = 700


@Flag var cacheVideoSize = 300


}
class DiskCacheSettings: Settings {


@Info<CacheSizeProvider> var cacheCurrentSize


@Action<ClearCacheCommand> var clearCache


@Flag var cacheSize = 1_000


@Flag var cacheImageSize = 700


@Flag var cacheVideoSize = 300


}
Раздел, где я повторяю все,
что говорил в самом начале

More Related Content

Similar to Anton Sergeev.pdf

Нагрузочное тестирование web проектов
Нагрузочное тестирование web проектовНагрузочное тестирование web проектов
Нагрузочное тестирование web проектовSQALab
 
Технология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектахТехнология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектахMedia Gorod
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомSQALab
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»SpbDotNet Community
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПОAlexey Lyanguzov
 
Система управления требованиями Devprom alm 3.5
Система управления требованиями Devprom alm 3.5Система управления требованиями Devprom alm 3.5
Система управления требованиями Devprom alm 3.5Evgeny Savitsky
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Fwdays
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаPositive Hack Days
 
TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!Mikalai Alimenkou
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGDataArt
 

Similar to Anton Sergeev.pdf (20)

Нагрузочное тестирование web проектов
Нагрузочное тестирование web проектовНагрузочное тестирование web проектов
Нагрузочное тестирование web проектов
 
Selen framework
Selen frameworkSelen framework
Selen framework
 
Технология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектахТехнология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектах
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодом
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПО
 
Система управления требованиями Devprom alm 3.5
Система управления требованиями Devprom alm 3.5Система управления требованиями Devprom alm 3.5
Система управления требованиями Devprom alm 3.5
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами Злоумышленника
 
TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
Class queries
Class queriesClass queries
Class queries
 

Anton Sergeev.pdf