<commit_before># [Clean Architecture](http://niquola.github.io/happydev-2013-slides/)

My slides for [happydev.2013](http://2013.happydev.ru)

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

> Software Architecture as a Set of Architectural Design Decisions

[<NAME> & <NAME>](http://new.csd.uwo.ca/courses/CS4471b/secure/Additional%20Resources/020_Architectures.dir/1_WICSA_Confs/WICSA_2005_Pittsburgh/2005_papers/18500111.pdf)

### Решение это часто компромис

Умные люди знают, любое решение имеет обратную сторону (tradeoff)

У монеты две стороны; У палки два конца

* [CAP](http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_CAP) & Basically Available, Soft-state, Eventually consistent
* Простота и Гибкость
* Модульность и монолитность

### Это сокрыто в природе вещей

[Три закона диалектики](http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D1%84%D0%B8%D0%BB%D0%BE%D1%81%D0%BE%D1%84%D0%B8%D0%B8#.D0.92_.D0.B4.D0.B8.D0.B0.D0.BB.D0.B5.D0.BA.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.BC_.D0.BC.D0.B0.D1.82.D0.B5.D1.80.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.BC.D0.B5)

*Закон единства и борьбы противоположностей*

> Движение и развитие в природе, обществе и мышлении
> обусловлено раздвоением единого на взаимопроникающие противоположности
> и разрешением возникающих противоречий между ними через борьбу

### Разница только в том насколько осознано вы выбираете

Иногда полезно использовать негативное определение
(ибо в порыве вдохновения о темной стороне часто забывают).

Хорошее решение уменьшает кол-во негативных последствий

>  Основная задача дизайна уменьшить боль, а не увеличить количество ништяков!
>  Нет хорошей или плохой архитектуры - она может быть обоснованной или нет!

[Тренинг «Проектирование обоснованной архитектуры», <NAME>](http://jugru.timepad.ru/event/80808/)

### LEAN manufacturing (производственные концепции и практики Toyota)

  Идет по лесу циклоп. Тут навстречу ему медведь метётся. Циклоп:
  - Стоять! Кто такой?
  - Медведь.
  - Та-а-ак-сь. Так и запишем: МЕДВЕДЬ. Завтра придешь к моей пещере,
  я тебя буду есть. Вопросы есть?
  - Нету...- поник медведь.
  Циклоп идет дальше. Тут навстречу - волк:
  - Стоять! Кто такой?
  - Волк.
  - Та-а-ак-сь. Так и запишем: ВОЛК. Завтра придешь к моей пещере, я
  тебя буду есть. Вопросы есть?
  - Нету...- поник волк.
  Циклоп идет дальше. Тут навстречу - заяц:
  - Стоять! Кто такой?
  - Заяц.
  - Та-а-ак-сь. Так и запишем: ЗАЯЦ. Завтра придешь к моей пещере, я
  тебя буду есть. Вопросы есть?
  - А можно не приходить?
  - Та-а-ак-сь. Зайца вычеркиваем.

Делая выбор, порой забывают, что есть еще одна опция - "Отложить этот выбор"

> good architecture maximizes
> the number of decisions
> not made

<NAME> (Uncle Bob)</h4>

### Архитектура не висит в воздухе

Мы часть бизнесс-механизма, производящего ПО (see [SEMAT](http://semat.org/))

Свое подтверждение архитектура должна выводить из требований
Требования из бизнесс модели
<commit_msg>исправление опечатки<commit_after># [Clean Architecture](http://niquola.github.io/happydev-2013-slides/)

My slides for [happydev.2013](http://2013.happydev.ru)

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

> Software Architecture as a Set of Architectural Design Decisions

[<NAME> & <NAME>](http://new.csd.uwo.ca/courses/CS4471b/secure/Additional%20Resources/020_Architectures.dir/1_WICSA_Confs/WICSA_2005_Pittsburgh/2005_papers/18500111.pdf)

### Решение это часто компромис

Умные люди знают, любое решение имеет обратную сторону (tradeoff)

У монеты две стороны; У палки два конца

* [CAP](http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_CAP) & Basically Available, Soft-state, Eventually consistent
* Простота и Гибкость
* Модульность и монолитность

### Это сокрыто в природе вещей

[Три закона диалектики](http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D1%84%D0%B8%D0%BB%D0%BE%D1%81%D0%BE%D1%84%D0%B8%D0%B8#.D0.92_.D0.B4.D0.B8.D0.B0.D0.BB.D0.B5.D0.BA.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.BC_.D0.BC.D0.B0.D1.82.D0.B5.D1.80.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.BC.D0.B5)

*Закон единства и борьбы противоположностей*

> Движение и развитие в природе, обществе и мышлении
> обусловлено раздвоением единого на взаимопроникающие противоположности
> и разрешением возникающих противоречий между ними через борьбу

### Разница только в том насколько осознано вы выбираете

Иногда полезно использовать негативное определение
(ибо в порыве вдохновения о темной стороне часто забывают).

Хорошее решение уменьшает кол-во негативных последствий

>  Основная задача дизайна уменьшить боль, а не увеличить количество ништяков!
>  Нет хорошей или плохой архитектуры - она может быть обоснованной или нет!

[Тренинг «Проектирование обоснованной архитектуры», <NAME>](http://jugru.timepad.ru/event/80808/)

### LEAN manufacturing (производственные концепции и практики Toyota)

  Идет по лесу циклоп. Тут навстречу ему медведь метётся. Циклоп:
  - Стоять! Кто такой?
  - Медведь.
  - Та-а-ак-сь. Так и запишем: МЕДВЕДЬ. Завтра придешь к моей пещере,
  я тебя буду есть. Вопросы есть?
  - Нету...- поник медведь.
  Циклоп идет дальше. Тут навстречу - волк:
  - Стоять! Кто такой?
  - Волк.
  - Та-а-ак-сь. Так и запишем: ВОЛК. Завтра придешь к моей пещере, я
  тебя буду есть. Вопросы есть?
  - Нету...- поник волк.
  Циклоп идет дальше. Тут навстречу - заяц:
  - Стоять! Кто такой?
  - Заяц.
  - Та-а-ак-сь. Так и запишем: ЗАЯЦ. Завтра придешь к моей пещере, я
  тебя буду есть. Вопросы есть?
  - А можно не приходить?
  - Та-а-ак-сь. Зайца вычеркиваем.

Делая выбор, порой забывают, что есть еще одна опция - "Отложить этот выбор"

> good architecture maximizes
> the number of decisions
> not made

<NAME> (Uncle Bob)</h4>

### Архитектура не висит в воздухе

Мы часть бизнес-механизма, производящего ПО (see [SEMAT](http://semat.org/))

Свое подтверждение архитектура должна выводить из требований
Требования из бизнес модели

{'fraction_non_alphanumeric': 0.11629089676216307, 'fraction_numerical': 0.046448550601796916, 'mean_word_length': 4.239786856127886, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '388208', 'n_tokens_mistral': 2909, 'n_tokens_neox': 3199, 'n_words': 589}