Архитектура. Другой взгляд

Жизнь надо прожить так, чтобы не было мучительно больно за бесцельно прожитые годы

Я должен писать код так, чтобы не пришлось переписывать ВСЁ, если резко поменяются требования
Хоршая архитектура должна быть гибкой!

<div className="ib-checkbox">
    <input type="checkbox" className="ib-checkbox--input">
</div>
                    
SOLID, DRY, YAGNI, KISS
SOLID, DRY, YAGNI, KISS
Don’t repeat yourself

<div className="ib-checkbox">
    <input type="checkbox" className="ib-checkbox--input">
</div>
                    

<div className="ib-checkbox">
    <input type="checkbox" className="ib-checkbox--input">
</div>
                    

function bemClass(block: string) {
    return (element?: string, mods?: object): string => {
        if (!element) { return block; }
        const result = [getElementClass(block, element)];
        if (mods) {
            forEach(mods, (needAdd, mod) => {
                if (!needAdd) { return; }
                result.push(getElementClass(block, element, mod));
            });
        }
        return result.join(' ');
    };
}
                    

const bem = bemClass('checkbox');

export default () => (
  <div class={bem()}>
    <input type="checkbox" className={bem('input')}>
  </div>
)
                    

const bem = bemClass('checkbox');

export default () => (
  <div class={bem()}>
    <input className={classnames({
        [bem('input')]: true,
        [bem('input', ['checked'])]: this.props.checked
        })}>
  </div>
)
                    

const bem = bemClass('checkbox');

classnames({
  [bem('input')]: true,
  [bem('input', ['checked'])]: this.props.checked
})
                    

  `ib_checkbox--input
  ${checked ? 'ib_checkbox--input__checked': ''}`
                    
Есть DRY, но еще есть KISS
Гибкость VS Сложность
Самый гибкий фреймворк - язык программирования
Причем здесь архитектура, ты же про код говоришь?!

Архитектура в IT — метафора

Метафора, которой не было...

Луковая архитектура

Metaphors We Live By

George Lakoff and Mark Johnson

Давайте спланируем перед тем как делать!
Архитектура = План = Дизайн
Как все устроено в проектировании
Вернемся в IT

Архитектура — совокупность важнейших решений об организации программной системы

https://ru.wikipedia.org/wiki/Архитектура_программного_обеспечения

Vuex

Важные - это те, которые невозможно поменять

Теорема CAP (известная также как теорема Брюера)

Теорема CAP (известная также как теорема Брюера)

Eventual consistency en.wikipedia.org/wiki/Eventual_consistency

Operational transformation

ru.wikipedia.org/wiki/Операциональное_преобразование
en.wikipedia.org/wiki/Operational_transformation
Operational transformation определит архитектуру

Доклад про все это

Никита Прокопов — Клиенту и серверу нужно поговорить

youtu.be/uHGeI9_fgUw
Почему мы начали с алгоритма

Про лень

Lean

Lean — концепция управления производственным предприятием, основанная на постоянном стремлении к устранению всех видов потерь

Имеет смысл откладывать ваши решения, если они не критичны
Лишний дизайн = потери
Со временем информации становиться больше

Robert C Martin - Clean Architecture and Design
(database is a detail)

youtu.be/Nsjsiz2A9mg?t=2541

От чего может зависеть архитектура

Евгений Кривошеев, Архитектура как функция от?

youtu.be/K-FtLWc8TxI
От чего может зависеть архитектура
  • Внешние требования
  • Внутренние требования
  • Регламенты, стандарты
  • Вопросы доверия и другие человеческие факторы
  • Структура команды (Закон Конвея)
  • Время, ресурсы
  • Законы, корпоративные ограничения
Разные точки зрения на архитектуру

Схема Закмана

ru.wikipedia.org/wiki/Модель_Закмана

Точки зрения по Закману

  • Мотивация
  • Люди
  • Данные
  • Функции
  • Место
  • Время

Слои по Закману

  • Контекст
  • Модель бизнеса
  • Системная модель
  • Технологическая модель
  • Детальное представление
И при чем здесь твои примеры?

Нужно ли использовать дополнительную сущность для генерации css классов в Infobip?

Хоршая архитектура должна быть гибкой!

Хоршая архитектура должна быть гибкой!

Архитектура должна подходить

Выводы

  • Архитектура - важные решения
  • Ищи ответы уровнем выше
  • Лень - двигатель прогресса

Спасибо!

Алексей Золотых

twitter: @zolotyh

telegram: @aazolotyh