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

Post on 22-May-2015

478 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Тимур Лукин

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

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

4

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

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

5

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

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

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

6

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

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

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

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

7

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

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

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

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

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

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

9

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

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

10

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

Директ

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

База Движок

Поиск

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

РСЯ

11

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

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

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

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 = ''

13

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

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

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

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

14

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

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

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

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

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

15

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

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

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

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

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

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

16

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

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

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

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

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

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

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

17

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

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

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

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

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

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

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

18

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

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

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

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

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

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

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

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

19

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

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

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

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

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

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

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

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

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

20

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

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

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

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

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

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

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

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

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

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

21

22

23

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

25

26

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

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

Опыт

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

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

Опыт

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

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

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

Опыт

Опыт

Опыт

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

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

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

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

SICP

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

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

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

SICP

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

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

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

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

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

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

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

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

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

Алгоритмы.

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

Алгоритмы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

49

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

50

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

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

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

Action procedure Action procedure Action procedure

Action procedure Action procedure

Aux. function Aux. function

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

51

Плюсы:

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

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

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

52

Плюсы:

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

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

Минусы:

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

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

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

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

53

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

54

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

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

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

Domain Object

Domain Object

Domain Object

Domain Object

Domain Object

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

55

Плюсы:

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

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

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

56

Плюсы:

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

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

Минусы:

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

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

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

57

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

58

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

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

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

Action procedure Action procedure Action procedure

Domain object Domain object

Domain object

Domain object

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

59

Плюсы:

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

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

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

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

60

Плюсы:

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

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

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

Минусы:

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

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

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

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

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

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

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

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

63

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

64

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

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

Table objectTable object Table object

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

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

65

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

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

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

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

66

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

67

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

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

Row ObjectRow Object Row Object

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

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

68

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

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

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

• слой служб.

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

69

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

70

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

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

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

Data Mapper

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

71

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

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

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

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

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

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

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

(Model — View — Controller).

74

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

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

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

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

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

Модель (Model)

Контроллеры

Контроллеры

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

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

77

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

78

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

Плюсы:

• простота;

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

79

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

Плюсы:

• простота;

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

Минусы:

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

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

80

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

81

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

Плюсы:

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

82

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

Плюсы:

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

Минусы:

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

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

83

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

• urls.py

• views.py

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

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

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

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

(Transform View)

86

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

87

Плюсы:

• гибкость;

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

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

88

Плюсы:

• гибкость;

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

Минусы:

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

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

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

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

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

89

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

90

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

XML + XSLT

91

Плюсы:

• гибкость;

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

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

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

92

Плюсы:

• гибкость;

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

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

Минусы:

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

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

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

93

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

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

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

приложений”

Алгоритмы

95

Алгоритмы

96

Алгоритмы

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

97

Алгоритмы

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

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

98

Алгоритмы

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

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

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

99

Алгоритмы

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

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

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

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

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

101

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

102

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

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

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

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

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

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

104

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

105

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

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

Вывод

Тимур Лукин

timlukin@yandex-team.ru

Спасибо

top related