SlideShare a Scribd company logo
1 of 62
Большие проекты,
архитектура и фреймворки
Александр Макаров, Yii
О себе
• 8 лет занимаюсь фреймворком Yii и другим открытым
кодом.
• Параллельно работал над коммерческими проектами.
• Участвую в PHP-FIG.Автор нескольких книг и
rmcreative.ru.
• В этом году провожу эксперимент с Patreon.
Архитектура?
Чёткого определения нет :)
Ряд решений о том, как
взаимодействуют отдельные части
системы. Это, в основном,
глобальные решения, которые
тяжело изменить потом.
• На какие элементы разбить код?
• Как эти элементы взаимодействуют?
Архитектура — это про интерфейсы,
контракты и абстракцию. Не про код и
конкретную реализацию.
Что такое интерфейс?
Наследование знают все.
А что такое инкапсуляция и полиморфизм?
Какой их смысл?
Фреймворк — не архитектура.
Он не построит архитектуру за вас.
Фреймворк ничего не знает об элементах
вашего приложения и не может определить
интерфейсы для взаимодействия этих
элементов.
Но может дать начальный шаблон и
инфраструктуру.
В случае Yii это MVC.
basic/advanced — не догма и не шаблон
полноценной архитектуры.
Кстати, про MVC...
Controller
• Принимает данные извне (GET, POST, консольный ввод).
• Отдаёт данные в нужном виде в Model и View.
• Не реализует логику, не занимается форматированием или
формированием ответа.
View
• Получает подготовленные контроллером данные.
• Форматирует данные для ответа.
• Никогда не работает с внешними данными, базой или
пользовательским вводом напрямую.
Model
• Не Model в Yii!
• Не ActiveRecord!
• M в MVC - не один класс, а целый доменный слой.
• Получает подготовленные контроллером данные,
обрабатывает их, возвращает результат.
• Никогда не работает с внешними данными или
пользовательским вводом напрямую.
• Не занимается форматированием или формированием
ответа.
Паттерны проектирования —
не архитектура!
Это проверенные варианты решения
более-менее распространённых проблем.
У каждого паттерна есть как плюсы, так и
минусы.
Даже правильно
реализованные
паттерны легко
использовать
неправильно
Зачем нужна архитектура?
• Для борьбы со сложностью.
• Цель — сделать понятным
каждый уровень абстракции.
• Для изменения под реалии бизнеса.
• Чтобы не приходилось всё переписывать с нуля.
• Сделать с первого раза хорошо — это не
просто.
Хорошая архитектура —
это дорого.
Плохая — еще дороже.
"If you think good architecture is expensive, try
bad architecture"
Brian Foote and Joseph Yoder
SOLID
Ещё одна модная аббревиатура...
Single Responsibility
Класс должен делать что-то одно.
Open-closed
Класс или модуль должен
скрывать детали реализации ,
но иметь чётко определённый
интерфейс, который позволяет
как использовать модуль или
класс , так и расширять его
наследованием.
Liskov substitution
- принцип об иерархии и
наследовании.
Классическое определение очень запутанное. Можно
проще.
Когда мы реализовываем новый класс, наследуясь от
существующего, новый должен быть с тем же интерфейсом
и вести себя абсолютно так же в тех же ситуациях. Так,
чтобы программа работала, если подсунуть ей как
родителя, так и наследника.
Interface segregation
Интерфейс не должен определять больше
функциональности, чем используется за один раз.
Это как Single Responsibility, только для интерфейсов.
Если интерфейс описывает более одной задачи,
разбиваем его на несколько интерфейсов.
Dependency inversion
Класс должен объявлять зависимости через интерфейсы,
но никогда не получать их самостоятельно.
Где-то это уже было...
Хорошие и плохие
зависимости
• Cohesion - связность.
• Coupling - связанность.
Cohesion
Степень единства элементов модуля.
Coupling
Степень взаимной зависимости модулей
/ классов.
Cohesion - хорошо. Coupling - плохо.
• Служащие одной цели классы собираются в модули (Не
модули Yii! Не конкретные классы! Логические рамки).
• Внутри модуля используем его классы напрямую. Нет
смысла абстрагироваться.
• Используемые модулем классы, но не связанные с ним,
используются только через интерфейсы.
• Модулю наплевать на то, как он получит зависимости.
Довольно много мест в Yii сделаны не по
SOLID.
На это есть причины.
Чтобы нарушать правила необходимо
их знать и уметь соблюдать.
Попробуйте делать в своих проектах
правильно.
Active Record
• Делает одновременно слишком много.
• Притягивает к себе бизнес-логику (ей не место в
AR).
• Позволяет достичь цели очень быстро.
• Удобен.
Переабстрагирование
Чрезмерное увлечение
абстракцией может привести
к тому, что каждый
отдельный её уровень
слишком прост, а
взаимодействие уровней
слишком сложно.
Документирование
архитектурных решений
Что описывать?
• Модули: структура компонентов.
• Компоненты и коннекторы: взаимодействие компонентов.
• Размещение: физическое распределение компонентов по
серверам.
Чем описывать?
• Текст
• UML
Как сделать приложение
надёжным?
Исправляю одно, отваливается другое...
TDD/BDD
Тестировать.
Ключевые места хорошей архитектуры не
сложно тестировать.
Архитектура зависит в большей степени от
предметной области, а не от применяемых
фреймворков и библиотек.
DDD
Domain Driven Design
Программист недостаточно знает
автоматизируемый им процесс.
Есть человек, который знает его от и до.
Это — доменный эксперт.
Большие проекты (> 6 месяцев).
Цель — получить архитектуру, близкую к
реальному процессу, используя термины
реального процесса.
Структурные блоки
• Value object — значение, которое может включать в себя
другие значения.
• Entity — объекты, которые можно идентифицировать.
Взяв два объекта и сравнив их, можно определить, тот
же это объект или нет.
• Aggregate — группа объектов. Имеет главный Entity, без
которого вся группа не имеет смысла (root).
Транзакционно целостна.
Доменный слой не зависит ни от чего.
Главные паттерны
• Repository — сохраняет чистые объекты и загружает их.
Чаще всего речь идёт про базу данных. Не AR!
• Доменный сервис — использует entity для какой-то
полезной работы. Всё ещё не зависит ни от чего вне
домена.
• Сервис приложения — предоставляется фреймворком
(components). Может использовать доменный сервис для
работы с доменом.
DDD действительно нужен
не часто
• Сложно.
• Оверхед.
• Абстрактно.
• Плохо натягивается на "бедный" домен.
* из слайдов Дмитрия Науменко
Изучать стоит!
Можно перенять частично
• Чёткие методы в AR, работающие с инстансом.
• Отдельные модели для форм.
• Сервисы.
• ActiveQuery.
Всё это стоит изучить!
Сложно — не повод не учиться.
Редко нужно — не повод не учиться.
Почитать
• Руководство Microsoft по проектированию архитектуры
приложений
• Domain Driven Design Quickly (InfoQ)
• Implementing Domain-Driven Design - Vaughn Vernon
• Domain Driven Design Distilled - Vaughn Vernon
• Catalog of Patterns of Enterprise Application Architecture
• Clean Architecture
Время вопросов!

More Related Content

What's hot

Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Прагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системПрагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системAlexander Byndyu
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программированияITCP Community
 
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...Alex V. Petrov
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPSergey Nemchinsky
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...Alex V. Petrov
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийCUSTIS
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыPavel Shalagin
 
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]Alex V. Petrov
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]Alex V. Petrov
 
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]Alex V. Petrov
 

What's hot (20)

Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Составные части объектного подхода
Составные части объектного подходаСоставные части объектного подхода
Составные части объектного подхода
 
ооп
оопооп
ооп
 
Прагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системПрагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных систем
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
 
ООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсыООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсы
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASP
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требований
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектуры
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
UML2. Eleven Trivial Tips for BPMN Modellers [1.01, RUS]
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
SPb BA & SA Night. Learning a New Business Domain [1.01, RUS]
 

Similar to Большие проекты, архитектура и фреймворки.

Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализMaksim Nikitin
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaLohika_Odessa_TechTalks
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSQALab
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Devs
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноBubon Makabra
 
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]Alex V. Petrov
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Andrey Bibichev
 

Similar to Большие проекты, архитектура и фреймворки. (20)

Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia Redunova
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработка
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Domain Context Integration
Domain Context IntegrationDomain Context Integration
Domain Context Integration
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)
 

More from EatDog

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? EatDog
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsEatDog
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in KotlinEatDog
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKEatDog
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous deliveryEatDog
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахEatDog
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластерEatDog
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие. EatDog
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorEatDog
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.EatDog
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.EatDog
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksEatDog
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для ДотнетчикаEatDog
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.EatDog
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.EatDog
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практикеEatDog
 
Mapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыMapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыEatDog
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIEatDog
 
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьAPI в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьEatDog
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейEatDog
 

More from EatDog (20)

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем?
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizons
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in Kotlin
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELK
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системах
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластер
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие.
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project Reactor
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without Mocks
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для Дотнетчика
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практике
 
Mapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыMapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные карты
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование API
 
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьAPI в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 

Большие проекты, архитектура и фреймворки.