107

Тимур Лукин - Архитектура и проектирование ПО

  • Upload
    yandex

  • View
    478

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Тимур Лукин - Архитектура и проектирование ПО
Page 2: Тимур Лукин - Архитектура и проектирование ПО

Тимур Лукин

Архитектура программного обеспечения

Page 3: Тимур Лукин - Архитектура и проектирование ПО

Что такое архитектура ПО?

Page 4: Тимур Лукин - Архитектура и проектирование ПО

4

Что такое архитектура ПО?

Наиболее абстрактное описание системы.

Page 5: Тимур Лукин - Архитектура и проектирование ПО

5

Что такое архитектура ПО?

Наиболее абстрактное описание системы.

То, что будет сложно изменить в дальнейшем.

Page 6: Тимур Лукин - Архитектура и проектирование ПО

6

Что такое архитектура ПО?

Наиболее абстрактное описание системы.

То, что будет сложно изменить в дальнейшем.

То, что кажется архитектору важным.

Page 7: Тимур Лукин - Архитектура и проектирование ПО

7

Что такое архитектура ПО?

Наиболее абстрактное описание системы.

То, что будет сложно изменить в дальнейшем.

То, что кажется архитектору важным.

Конкретный набор документов.

Page 8: Тимур Лукин - Архитектура и проектирование ПО

Описание архитектуры

Page 9: Тимур Лукин - Архитектура и проектирование ПО

9

Описание архитектуры

Компоненты системы и их взаимодействие.

Page 10: Тимур Лукин - Архитектура и проектирование ПО

10

Описание архитектуры

Директ

ПартнерскийИнтерфейс

База Движок

Поиск

Компоненты системы и их взаимодействие.

РСЯ

Page 11: Тимур Лукин - Архитектура и проектирование ПО

11

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Page 12: Тимур Лукин - Архитектура и проектирование ПО

12

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

class Banner (object): phrases = [] def show (self, condition): '''Returns banner representation''' pass def add_phrase (self, phrases): '''Adds Phrase object to phrases list''' pass

class Phrase (object): text = ''

Page 13: Тимур Лукин - Архитектура и проектирование ПО

13

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Page 14: Тимур Лукин - Архитектура и проектирование ПО

14

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Page 15: Тимур Лукин - Архитектура и проектирование ПО

15

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Page 16: Тимур Лукин - Архитектура и проектирование ПО

16

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Безопасность.

Page 17: Тимур Лукин - Архитектура и проектирование ПО

17

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Безопасность.Использование технологий и стороннего ПО.

Page 18: Тимур Лукин - Архитектура и проектирование ПО

18

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Безопасность.Использование технологий и стороннего ПО.

Использование ресурсов.

Page 19: Тимур Лукин - Архитектура и проектирование ПО

19

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Безопасность.Использование технологий и стороннего ПО.

Использование ресурсов.

Способы развития системы.

Page 20: Тимур Лукин - Архитектура и проектирование ПО

20

Описание архитектуры

Самые важные классы / функции.

Компоненты системы и их взаимодействие.

Организация данных.

Структура пользовательского интерфейса.

Обработка исключительных ситуаций и сбоев.

Безопасность.Использование технологий и стороннего ПО.

Использование ресурсов.

Способы развития системы.

Способы тестирования системы.

Page 21: Тимур Лукин - Архитектура и проектирование ПО

21

Page 22: Тимур Лукин - Архитектура и проектирование ПО

22

Page 23: Тимур Лукин - Архитектура и проектирование ПО

23

Page 24: Тимур Лукин - Архитектура и проектирование ПО

Когда нужно проектирование?

Page 25: Тимур Лукин - Архитектура и проектирование ПО

25

Page 26: Тимур Лукин - Архитектура и проектирование ПО

26

Page 27: Тимур Лукин - Архитектура и проектирование ПО

Что нужно архитектору

Page 28: Тимур Лукин - Архитектура и проектирование ПО

Что нужно архитектору

Опыт

Page 29: Тимур Лукин - Архитектура и проектирование ПО

Что нужно архитектору

Умение работать с абстракциями.

Опыт

Page 30: Тимур Лукин - Архитектура и проектирование ПО

Что нужно архитектору

Умение работать с абстракциями.

Знание типовых решений.

Опыт

Page 31: Тимур Лукин - Архитектура и проектирование ПО

Опыт

Page 32: Тимур Лукин - Архитектура и проектирование ПО

Опыт

Page 33: Тимур Лукин - Архитектура и проектирование ПО

Умение работать с абстракциями

Page 34: Тимур Лукин - Архитектура и проектирование ПО

Умение работать с абстракциями

Х. Абельсон, Д. Сассман

“Структура и интерпретация компьютерных программ”

SICP

Page 35: Тимур Лукин - Архитектура и проектирование ПО

Умение работать с абстракциями

Х. Абельсон, Д. Сассман

“Структура и интерпретация компьютерных программ”

SICP

Page 36: Тимур Лукин - Архитектура и проектирование ПО

Типовые решения

Page 37: Тимур Лукин - Архитектура и проектирование ПО

Типовые решения

Архитектурные шаблоны.

Page 38: Тимур Лукин - Архитектура и проектирование ПО

Типовые решения

Архитектурные шаблоны.

Низкоуровневые шаблоны.

Page 39: Тимур Лукин - Архитектура и проектирование ПО

Типовые решения

Архитектурные шаблоны.

Низкоуровневые шаблоны.

Алгоритмы.

Page 40: Тимур Лукин - Архитектура и проектирование ПО

Типовые решения

Алгоритмы.

Идиомы языка.

Низкоуровневые шаблоны.

Архитектурные шаблоны.

Page 41: Тимур Лукин - Архитектура и проектирование ПО

Архитектурные шаблоны

Page 42: Тимур Лукин - Архитектура и проектирование ПО

Концепция слоев

Page 43: Тимур Лукин - Архитектура и проектирование ПО

Концепция слоев

Page 44: Тимур Лукин - Архитектура и проектирование ПО

Концепция слоев

Представление (Presentation).

Page 45: Тимур Лукин - Архитектура и проектирование ПО

Концепция слоев

Представление (Presentation).

Домен (Domain, бизнес-логика).

Page 46: Тимур Лукин - Архитектура и проектирование ПО

Концепция слоев

Представление (Presentation).

Домен (Domain, бизнес-логика).

Источник данных (Data Source).

Page 47: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны домена

Page 48: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны домена

Сценарий транзакции (Transaction Script).

Модель предметной области (Domain Model).

Слой служб (Service Layer).

Page 49: Тимур Лукин - Архитектура и проектирование ПО

49

Сценарий транзакции (Transaction Script)

Page 50: Тимур Лукин - Архитектура и проектирование ПО

50

Слой представления (Presentation)

Слой домена (Domain)

Слой источника данных (Data Source)

Action procedure Action procedure Action procedure

Action procedure Action procedure

Aux. function Aux. function

Сценарий транзакции (Transaction Script)

Page 51: Тимур Лукин - Архитектура и проектирование ПО

51

Плюсы:

• прост в реализации;

• интуитивно понятен.

Сценарий транзакции (Transaction Script)

Page 52: Тимур Лукин - Архитектура и проектирование ПО

52

Плюсы:

• прост в реализации;

• интуитивно понятен.

Минусы:

• тяжело описывать сложную логику;

• тяжело следить за дублированием кода;

• плохая изоляция представления от источника.

Сценарий транзакции (Transaction Script)

Page 53: Тимур Лукин - Архитектура и проектирование ПО

53

Модель предметной области (Domain Model)

Page 54: Тимур Лукин - Архитектура и проектирование ПО

54

Слой представления (Presentation)

Слой домена (Domain)

Слой источника данных (Data Source)

Domain Object

Domain Object

Domain Object

Domain Object

Domain Object

Модель предметной области (Domain Model)

Page 55: Тимур Лукин - Архитектура и проектирование ПО

55

Плюсы:

• хорошо описывает сложную бизнес-логику;

• обеспечивает хорошую изоляцию.

Модель предметной области (Domain Model)

Page 56: Тимур Лукин - Архитектура и проектирование ПО

56

Плюсы:

• хорошо описывает сложную бизнес-логику;

• обеспечивает хорошую изоляцию.

Минусы:

• сложна в реализации;

• возможны проблемы с эффективностью.

Модель предметной области (Domain Model)

Page 57: Тимур Лукин - Архитектура и проектирование ПО

57

Слой служб (Service Layer)

Page 58: Тимур Лукин - Архитектура и проектирование ПО

58

Слой представления (Presentation)

Слой домена (Domain)

Слой источника данных (Data Source)

Action procedure Action procedure Action procedure

Domain object Domain object

Domain object

Domain object

Слой служб (Service Layer)

Page 59: Тимур Лукин - Архитектура и проектирование ПО

59

Плюсы:

• хорошо описывает сложную бизнес-логику;

• хорошо реализует сценарии использования;

• обеспечивает отличную изоляцию.

Слой служб (Service Layer)

Page 60: Тимур Лукин - Архитектура и проектирование ПО

60

Плюсы:

• хорошо описывает сложную бизнес-логику;

• хорошо реализует сценарии использования;

• обеспечивает отличную изоляцию.

Минусы:

• сложен в реализации;

• возможны проблемы с эффективностью.

Слой служб (Service Layer)

Page 61: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны источника данных

Page 62: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны источника данных

Шлюз таблицы данных (Table Data Gateway).

Шлюз записи данных (Row Data Gateway).

Преобразователь данных (Data Mapper).

Page 63: Тимур Лукин - Архитектура и проектирование ПО

63

Шлюз таблицы данных (Table Data Gateway)

Page 64: Тимур Лукин - Архитектура и проектирование ПО

64

Слой домена (Domain)

Слой источника данных (Data Source)

Table objectTable object Table object

Источник данных

Шлюз таблицы данных (Table Data Gateway)

Page 65: Тимур Лукин - Архитектура и проектирование ПО

65

Подходящие решения домена:

• сценарий транзакции;

• модель предметной области.

Шлюз таблицы данных (Table Data Gateway)

Page 66: Тимур Лукин - Архитектура и проектирование ПО

66

Шлюз записи данных (Row Data Gateway)

Page 67: Тимур Лукин - Архитектура и проектирование ПО

67

Слой домена (Domain)

Слой источника данных (Data Source)

Row ObjectRow Object Row Object

Источник данных

Шлюз записи данных (Row Data Gateway)

Page 68: Тимур Лукин - Архитектура и проектирование ПО

68

Подходящие решения домена:

• сценарий транзакции;

• модель предметной области (Active Record);

• слой служб.

Шлюз записи данных (Row Data Gateway)

Page 69: Тимур Лукин - Архитектура и проектирование ПО

69

Преобразователь данных (Data Mapper)

Page 70: Тимур Лукин - Архитектура и проектирование ПО

70

Слой домена (Domain)

Слой источника данных (Data Source)

Источник данных

Data Mapper

Преобразователь данных (Data Mapper)

Page 71: Тимур Лукин - Архитектура и проектирование ПО

71

Подходящие решения домена:

• модель предметной области;

• слой служб (с моделью предметной области).

Преобразователь данных (Data Mapper)

Page 72: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны представления

Page 73: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны представления

Модель — Представление — Контроллер

(Model — View — Controller).

Page 74: Тимур Лукин - Архитектура и проектирование ПО

74

Модель — Представление — Контроллер (MVC)

Слой представления (Presentation)

Слой домена (Domain)

Представление (View)

Контроллер (Controller)

Модель (Model)

Page 75: Тимур Лукин - Архитектура и проектирование ПО

Контроллеры

Page 76: Тимур Лукин - Архитектура и проектирование ПО

Контроллеры

Контроллер страниц (Page Controller)

Контроллер запросов (Front Controller)

Page 77: Тимур Лукин - Архитектура и проектирование ПО

77

Контроллер страниц (Page Controller)

Page 78: Тимур Лукин - Архитектура и проектирование ПО

78

Контроллер страниц (Page Controller)

Плюсы:

• простота;

• хорошая изоляция.

Page 79: Тимур Лукин - Архитектура и проектирование ПО

79

Контроллер страниц (Page Controller)

Плюсы:

• простота;

• хорошая изоляция.

Минусы:

• плохая гибкость;

• быстрый рост числа страниц.

Page 80: Тимур Лукин - Архитектура и проектирование ПО

80

Контроллер запросов (Front Controller)

Page 81: Тимур Лукин - Архитектура и проектирование ПО

81

Контроллер запросов (Front Controller)

Плюсы:

• высокая гибкость.

Page 82: Тимур Лукин - Архитектура и проектирование ПО

82

Контроллер запросов (Front Controller)

Плюсы:

• высокая гибкость.

Минусы:

• плохая изоляция;

• сложность реализации.

Page 83: Тимур Лукин - Архитектура и проектирование ПО

83

Контроллер запросов (Front Controller)

• urls.py

• views.py

Page 84: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны представления

Page 85: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны представления

Представление по шаблону (Template View).

Представление с преобразованием

(Transform View)

Page 86: Тимур Лукин - Архитектура и проектирование ПО

86

Представление по шаблону (Template View)

Page 87: Тимур Лукин - Архитектура и проектирование ПО

87

Плюсы:

• гибкость;

• наглядность написания.

Представление по шаблону (Template View)

Page 88: Тимур Лукин - Архитектура и проектирование ПО

88

Плюсы:

• гибкость;

• наглядность написания.

Минусы:

• доступность скриптлетов (scriptlets) и,

следовательно, опасность спагетти-кода;

• возможны побочные эффекты;

• сложность верстки.

Представление по шаблону (Template View)

Page 89: Тимур Лукин - Архитектура и проектирование ПО

89

Представление с преобразованием (Transform View)

Page 90: Тимур Лукин - Архитектура и проектирование ПО

90

Представление с преобразованием (Transform View)

XML + XSLT

Page 91: Тимур Лукин - Архитектура и проектирование ПО

91

Плюсы:

• гибкость;

• отличная изоляция представления;

• не дублируется код.

Представление с преобразованием (Transform View)

Page 92: Тимур Лукин - Архитектура и проектирование ПО

92

Плюсы:

• гибкость;

• отличная изоляция представления;

• не дублируется код.

Минусы:

• сложность верстки;

• еще одна технология для изучения.

Представление с преобразованием (Transform View)

Page 93: Тимур Лукин - Архитектура и проектирование ПО

93

Архитектурные шаблоны

Мартин Фаулер

“Архитектура корпоративных программных

приложений”

Page 94: Тимур Лукин - Архитектура и проектирование ПО

Алгоритмы

Page 95: Тимур Лукин - Архитектура и проектирование ПО

95

Алгоритмы

Page 96: Тимур Лукин - Архитектура и проектирование ПО

96

Алгоритмы

Д. Кнут "Искусство программирования"

Page 97: Тимур Лукин - Архитектура и проектирование ПО

97

Алгоритмы

Д. Кнут "Искусство программирования"

Н. Вирт "Алгоритмы и структуры данных"

Page 98: Тимур Лукин - Архитектура и проектирование ПО

98

Алгоритмы

Д. Кнут "Искусство программирования"

Н. Вирт "Алгоритмы и структуры данных"

Т. Кормен "Алгоритмы. построение и анализ"

Page 99: Тимур Лукин - Архитектура и проектирование ПО

99

Алгоритмы

Д. Кнут "Искусство программирования"

Н. Вирт "Алгоритмы и структуры данных"

Т. Кормен "Алгоритмы. построение и анализ"

А. Шень "Программирование. Теоремы и задачи"

Page 100: Тимур Лукин - Архитектура и проектирование ПО

Шаблоны проектирования

Page 101: Тимур Лукин - Архитектура и проектирование ПО

101

Шаблоны проектирования ООП

Page 102: Тимур Лукин - Архитектура и проектирование ПО

102

Шаблоны проектирования ООП

Э. Гамма , Р. Хелм, Р. Джонсон, Дж. Влиссидс

"Приёмы объектно-ориентированного

проектирования. Паттерны проектирования"

“Банда четырех”

Page 103: Тимур Лукин - Архитектура и проектирование ПО

103

Шаблоны проектирования ООПclass Singleton (object): _instance = None def __new__ (cls, *args, **kwargs): if cls._instance is None: cls._instance =\ super(cls.__class__, cls).__new__(cls, *args, **kwargs) return cls._instance else: return cls._instance

>>> class A (Singleton):... pass... >>> a, b = A(), A()>>> a is bTrue

Page 104: Тимур Лукин - Архитектура и проектирование ПО

104

Шаблоны проектирования ФП

Page 105: Тимур Лукин - Архитектура и проектирование ПО

105

reduce(lambda res, x: res + x, map(lambda x: x * x, filter(lambda x: x % 2, range(1, 101))))

Шаблоны проектирования ФП

Page 106: Тимур Лукин - Архитектура и проектирование ПО

Вывод

Page 107: Тимур Лукин - Архитектура и проектирование ПО

Тимур Лукин

[email protected]

Спасибо