170
1

Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Embed Size (px)

Citation preview

Page 1: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

1

Page 2: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

2

Page 3: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

• То, что написано не нами

2

Page 4: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

То, что написано не нами

3

Page 5: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

То, что написано не намиАрхитектуры нет или плохая архитектура

4

Page 6: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

То, что написано не намиАрхитектуры нет или плохая архитектураСлабоструктурированный или слишком запутанный код

5

Page 7: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что такое legacy?

То, что написано не намиАрхитектуры нет или плохая архитектураСлабоструктурированный или слишком запутанный кодWTF/ в час превышает 9000

6

Page 8: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как это Legacy мерять?

7

Page 9: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как это Legacy мерять?

= T H 1

1 T - время техдолга в часах, H - часовая ставка разработчика

8

Page 10: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Но как определить T?

9

Page 11: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что есть тех.долг?

10

Page 12: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что есть тех.долг?

• Ошибки и уязвимости

10

Page 13: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что есть тех.долг?

• Ошибки и уязвимости

• Проблемы сопровождаемости

10

Page 14: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что есть тех.долг?

• Ошибки и уязвимости

• Проблемы сопровождаемости

• Дублирование кода

10

Page 15: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что есть тех.долг?

• Ошибки и уязвимости

• Проблемы сопровождаемости

• Дублирование кода

• Низкий процент покрытия тестами

10

Page 16: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тулы для оценки

SonarQube

11

Page 17: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

12

Page 18: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тулы для оценки

SonarQubeMobSF/Akana/Whatever Security Analysis tool

13

Page 19: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

14

Page 20: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тулы для оценки

SonarQubeMobSF/Akana/Whatever Security Analysis toolArchitecture analysis tool

15

Page 21: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тулы для оценки

SonarQubeMobSF/Akana/Whatever Security Analysis toolArchitecture analysis tool

16

Page 22: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

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

Архитектура - это набор структур, состоящих из компонентов и связей между ними, а также свойств одних и вторых, определяющих свойства системы 2

2 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley

17

Page 23: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что это к чертям значит?

18

Page 24: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что это к чертям значит?

• Архитектура - ключ к свойствам системы, которые важны пользователю

18

Page 25: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что это к чертям значит?

• Архитектура - ключ к свойствам системы, которые важны пользователю

• Или владелец продукта думает, что они важны

18

Page 26: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что это к чертям значит?

• Архитектура - ключ к свойствам системы, которые важны пользователю

• Или владелец продукта думает, что они важны

• То есть плохих или хороших архитектур не бывает, они либо подходят, либо не подходят под требования

18

Page 27: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Когда нужно думать про архитектуру?

19

Page 28: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Когда нужно думать про архитектуру?

• Если вы проверяете технологию, об архитектуре можно не думать

19

Page 29: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Когда нужно думать про архитектуру?

• Если вы проверяете технологию, об архитектуре можно не думать

• Если вы пишите скрипт для отсылки почты по списку адресов, об архитектуре можно не думать

19

Page 30: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Когда нужно думать про архитектуру?

• Если вы проверяете технологию, об архитектуре можно не думать

• Если вы пишите скрипт для отсылки почты по списку адресов, об архитектуре можно не думать

• Во всех остальных случаях, про архитектуру надо думать

19

Page 31: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

20

Page 32: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

• Быть производительным

20

Page 33: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

• Быть производительным

• Быть локализуемым

20

Page 34: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

• Быть производительным

• Быть локализуемым

• Работать оффлайн

20

Page 35: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

• Быть производительным

• Быть локализуемым

• Работать оффлайн

• Быть тестируемым

20

Page 36: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

• Быть производительным

• Быть локализуемым

• Работать оффлайн

• Быть тестируемым

• Быть расширяемым

20

Page 37: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тестируемость

21

Page 38: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тестируемость

• Аргументы и возвращаемые значения должны передаваться явно

21

Page 39: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тестируемость

• Аргументы и возвращаемые значения должны передаваться явно

• Зависимости должны быть переданы явно

21

Page 40: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Тестируемость

• Аргументы и возвращаемые значения должны передаваться явно

• Зависимости должны быть переданы явно

• Зависимости должны быть заменяемы в тестах

21

Page 41: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Расширяемость

22

Page 42: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Расширяемость

• Изменения неизбежны

22

Page 43: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Расширяемость

• Изменения неизбежны

• Сколько стоят реализация изменений:

• Сколько стоит создание механизма для осуществления изменений?

• Сколько стоит осуществление изменения с помощью этого механизма?

22

Page 44: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Расширяемость

Для N похожих изменений примерное уравнение равно:

* <= + * ( )

23

Page 45: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие наши целевые свойства?

Быть производительнымБыть локализуемымРаботать оффлайнБыть тестируемымБыть расширяемым

24

Page 46: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

25

Page 47: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

25

Page 48: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

26

Page 49: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

27

Page 50: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

28

Page 51: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

28

Page 52: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

• Google Android architecture

28

Page 53: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

29

Page 54: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

30

Page 55: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

30

Page 56: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

• Google Android architecture

30

Page 57: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какая архитектура отвечает этим требованиям?

• Clean architecture

• Google Android architecture

• VIPER

30

Page 58: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что общего?

31

Page 59: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Что общего?

В строго поделенных на слои системах, слою позволено использовать только слой, расположенный непосредственно

под ним 3

3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley

32

Page 60: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

33

Page 61: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

1. 4 базы данных

33

Page 62: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

1. 4 базы данных

2. 30 таблиц

33

Page 63: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

1. 4 базы данных

2. 30 таблиц

3. 278 классов для доступа к данным

33

Page 64: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

1. 4 базы данных

2. 30 таблиц

3. 278 классов для доступа к данным

4. 20,000 строк кода для доступа к данным

33

Page 65: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример с GreenDao

1. 4 базы данных

2. 30 таблиц

3. 278 классов для доступа к данным

4. 20,000 строк кода для доступа к данным

5. 0% фактического покрытия

33

Page 66: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

34

Page 67: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример из Entity

public class Entity {

private String name; private Long id;

public String getName(); …

}

35

Page 68: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример - запрос Entity @AutoFactory

public class GetEntityRequest extends SqlRequest {

@Override

protected String[] getColumns() {

return new String[] {

F + “.” + ID_FIELD + “ AS “ + F_ID_FIELD,

F + “.” + NAME_FIELD + “ AS “ + F_NAME_FIELD,

STORAGE + “.” + ID_FIELD + “ AS “ + STORAGE_ID_FIELD,

SYNC + “.” + ID_FIELD + “ AS “ + SYNC_ID_FIELD,

}

}

}

36

Page 69: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример - запрос Entity @Override

public Entity createEntity() {

if (!cursor.moveToFirst()) {

return null;

}

String name = cursor.getString(cursor.getColumnIndex(F_NAME_FIELD));

return new Entity(id, name, …);

}

37

Page 70: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример - запрос Entity

@AutoFactory public class GetEntityRequest extends SqlRequest { … }

38

Page 71: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Пример - запрос Entity

@AutoFactory public class GetEntityRequest extends SqlRequest { … }

@Generated public class GetEntityRequestFactory { public GetEntityRequest create() { return new GetEntityRequest(); } }

39

Page 72: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Вызов запроса

public class MyEntityActivity extends Activity {

@Inject GetEntityRequestFactory requestFactory;

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

Entity entity = requestFactory.create().createEntity();

show(entity);

}

}

40

Page 73: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

В чем проблема?

41

Page 74: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

В чем проблема?

1. Чтение диска на UI

41

Page 75: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

В чем проблема?

1. Чтение диска на UI

2. Большое количество кода, чтобы работало

41

Page 76: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

В чем проблема?

1. Чтение диска на UI

2. Большое количество кода, чтобы работало

3. Слой представления имеет доступ к данным, затрудняя юнит-тестирование

41

Page 77: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

В чем проблема?

1. Чтение диска на UI

2. Большое количество кода, чтобы работало

3. Слой представления имеет доступ к данным, затрудняя юнит-тестирование

4. Вы не знаете свою модель данных

41

Page 78: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

42

Page 79: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Выделение отдельного слоя

43

Page 80: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Выделение отдельного слоя

1. Отдельный модуль

43

Page 81: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Выделение отдельного слоя

1. Отдельный модуль

2. Покрытый на 100% тестами

43

Page 82: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

А зачем?

44

Page 83: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

А зачем?

1. Вы поймете свою модель

44

Page 84: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

А зачем?

1. Вы поймете свою модель

2. Обеспечите ее гарантирование функционирование

44

Page 85: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

А зачем?

1. Вы поймете свою модель

2. Обеспечите ее гарантирование функционирование

3. Защитите от неверного использования

44

Page 86: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как осознать модель данных

45

Page 87: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как осознать модель данных

Stetho 4

4 http://facebook.github.io/stetho/

46

Page 88: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как осознать модель данных

Stetho 4

Db files

4 http://facebook.github.io/stetho/

47

Page 89: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Как осознать модель данных

Stetho 4

or Android file ExplorerDb filessqldelight 5

5 https://github.com/square/sqldelight

4 http://facebook.github.io/stetho/

48

Page 90: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Stetho

compile 'com.facebook.stetho:stetho:1.5.0'

49

Page 91: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Stetho

public class MyApplication extends Application { … public void onCreate() { super.onCreate(); … Stetho.initializeWithDefaults(this); }}

50

Page 92: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

51

Page 93: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

52

Page 94: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

sqldelight

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.squareup.sqldelight:gradle-plugin:0.6.1' }}

apply plugin: 'com.squareup.sqldelight'

53

Page 95: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

sqldelight

CREATE TABLE entity (

_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,

name TEXT NOT NULL

);

54

Page 96: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

sqldelight

public class Entity {

private Long id;

private String name;

public Long getId() { … } public String getName() { … });

55

Page 97: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

sqldelight@Table(name = “Entity”)public class Entity {

@Column(name = “_id”) private Long _id;

@Column(name = “NAME”) private String name;

public Long getId() { … } public String getName() { … });

56

Page 98: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

57

Page 99: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

57

Page 100: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

57

Page 101: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

3. Deprecate

57

Page 102: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

3. Deprecate

4. Replace

57

Page 103: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

58

Page 104: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

58

Page 105: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

Entity entity = requestFactory.create().createEntity();

show(entity);

}

59

Page 106: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

Entity entity = requestFactory.create().createEntity();

show(entity);

}

60

Page 107: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

GetEntityRequest request = requestFactory.create();

Entity entity = request.createEntity();

show(entity);

}

61

Page 108: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@VisibleForTesting protected Entity loadEntity() { return requestFactory.create().createEntity(); }

62

Page 109: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@VisibleForTesting

protected Observable<Entity> loadEntity() {

return Single.just(

requestFactory.create().createEntity()

);

}

63

Page 110: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

loadEntity()

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread());

.subscribe({entity, throwable} -> {

show(entity);

});

}

64

Page 111: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Override

protected void onCreate(Bundle instance) {

super.onCreate(instance);

viewModel.loadEntity()

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread());

.subscribe({entity, throwable} -> {

show(entity);

});

}

65

Page 112: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

@Test public void shouldLoadEntity() { ViewModel viewModel = new ViewModel();

viewModel.loadEntity() .subscribe({entity, throwable} -> { checkEntity(entity); });

}

66

Page 113: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Create unit test

public void checkEntity(Entity entity) { assertEquals(NAME, entity.getName()); assertEquals(ID, entity.getId()); … }

67

Page 114: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

68

Page 115: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

68

Page 116: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

68

Page 117: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Implement

public interface EntityDAO {

Observable<Entity> loadEntity();

}

69

Page 118: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Implement

public class ViewModel {

@Inject EntityDao entityDao;

public Observable<Entity> loadEntity() {

return entityDao.loadEntity();

}

}

70

Page 119: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Implement

public class GreenDaoEntityDAO implements EntityDAO {

public Observable<Entity> loadEntity() {

RxDao<DbEntity> rxDao = daoSession.getEntityDao().rx();

return rxDao.load();

}

}

71

Page 120: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №1

72

Page 121: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №1

1. Обьект из базы - это не то, что удобно использовать в представлении

72

Page 122: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №1

1. Обьект из базы - это не то, что удобно использовать в представлении

2. Скорее у вас есть Entity и DbEntity.

72

Page 123: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №1

1. Обьект из базы - это не то, что удобно использовать в представлении

2. Скорее у вас есть Entity и DbEntity.

3. Что же делать?

72

Page 124: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Конвертеры!

73

Page 125: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Конвертеры public class GreenDaoEntityDAO implements EntityDAO {

public Observable<Entity> loadEntity() {

RxDao<DbEntity> rxDao = daoSession.getEntityDao().rx();

return rxDao.load().flatMap(dbEntity -> convert(dbEntity));

}

}

74

Page 126: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Конвертеры public class GreenDaoEntityDAO implements EntityDAO {

public Observable<Entity> loadEntity() {

RxDao<DbEntity> rxDao = daoSession.getEntityDao().rx();

return rxDao.load().flatMap(dbEntity -> convert(dbEntity));

}

}

75

Page 127: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №2

76

Page 128: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Проблема №2

1. Младшим разработчикам наплевать на эту вашу архитектуру

76

Page 129: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Данные из модуля приложения… public class GreenDaoEntityDAO implements EntityDAO {

public Observable<Entity> loadEntity() {

String userId = ApplicationSettings.getUserId();

RxDao<DbEntity> rxDao = daoSession.getEntityDao().rx();

return rxDao.load(userId).flatMap(dbEntity -> convert(dbEntity));

}

}

77

Page 130: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Понадобилось кому почитать данные из модуля приложения…

78

Page 131: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Понадобилось кому почитать данные из модуля приложения…

• Переносим слой в отдельный модуль

78

Page 132: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Понадобилось кому почитать данные из модуля приложения…

• Переносим слой в отдельный модуль

• Покрываем его тестами

78

Page 133: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Понадобилось кому почитать данные из модуля приложения…

• Переносим слой в отдельный модуль

• Покрываем его тестами

• Поставляем бинарно

78

Page 134: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

79

Page 135: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

79

Page 136: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

79

Page 137: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

3. Deprecate

79

Page 138: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Deprecate

/** * @deprecated Please, use {@link EntityDao#loadEntity()} */@Deprecated@AutoFactorypublic class GetEntityRequest {...}

80

Page 139: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

81

Page 140: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

81

Page 141: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

81

Page 142: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

3. Deprecate

81

Page 143: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Интеграция в приложение - CIDR!

1. Create unit test

2. Implement

3. Deprecate

4. Replace

81

Page 144: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

82

Page 145: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

1. 4 базы данных

82

Page 146: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

1. 4 базы данных

2. 30 таблиц

82

Page 147: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

1. 4 базы данных

2. 30 таблиц

3. 84 класса для доступа к данным (было 278)

82

Page 148: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

1. 4 базы данных

2. 30 таблиц

3. 84 класса для доступа к данным (было 278)

4. 7400 строк кода вместе с тестами (было 20,000 без тестов)

82

Page 149: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Финальная статистика

1. 4 базы данных

2. 30 таблиц

3. 84 класса для доступа к данным (было 278)

4. 7400 строк кода вместе с тестами (было 20,000 без тестов)

5. 100% фактического покрытия (было 0%)

82

Page 150: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

83

Page 151: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

84

Page 152: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

• Быть производительным ✅

84

Page 153: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

• Быть производительным ✅

• Быть локализуемым

84

Page 154: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

• Быть производительным ✅

• Быть локализуемым

• Работать оффлайн ✅

84

Page 155: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

• Быть производительным ✅

• Быть локализуемым

• Работать оффлайн ✅

• Быть тестируемым ✅

84

Page 156: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Какие целевые свойства достигнуты?

• Быть производительным ✅

• Быть локализуемым

• Работать оффлайн ✅

• Быть тестируемым ✅

• Быть расширяемым ✅

84

Page 157: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где еще можно использовать такой подход?

85

Page 158: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где еще можно использовать такой подход?

• Переделывая взаимодействие с сетью

85

Page 159: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где еще можно использовать такой подход?

• Переделывая взаимодействие с сетью

• Переходя на MVVM

85

Page 160: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где еще можно использовать такой подход?

• Переделывая взаимодействие с сетью

• Переходя на MVVM

• Вообще, вводя любой новый слой

85

Page 161: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где этот подход не помогает?

86

Page 162: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где этот подход не помогает?

• С секьюрити

86

Page 163: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где этот подход не помогает?

• С секьюрити

• С тулами

86

Page 164: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

Где этот подход не помогает?

• С секьюрити

• С тулами

• С любым межкомпонентным code

86

Page 165: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

О докладчике

87

Page 166: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

О докладчике

• Владимир Иванов - ведуший разработчик в EPAM

87

Page 167: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

О докладчике

• Владимир Иванов - ведуший разработчик в EPAM

• Больше 6 лет разработки под Android

87

Page 168: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

О докладчике

• Владимир Иванов - ведуший разработчик в EPAM

• Больше 6 лет разработки под Android

• Больше 15 опубликованных приложений

87

Page 169: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

О докладчике

• Владимир Иванов - ведуший разработчик в EPAM

• Больше 6 лет разработки под Android

• Больше 15 опубликованных приложений

• Широкий кругозор в мобильных технологиях

87

Page 170: Что такое legacy? - · PDF file3 Software Architecture in Practice, 3rd Edition, Bass, Clements, Kazman, Addison-Wesley 32. Пример с GreenDao 33. Пример с GreenDao

QA

88