Заметки на тему чистой архитектуры.
Прочитал книгу Роберта Мартина, Чистая архитектура. Получил пару инсайтов. Хотя вещи очевидные и программисты должны их понимать. Любой софт можно разделить на уровни. Уровни есть горизонтальные и вертикальные. Вертикальные уровни это у нас "величина абстрактности". Возьмем например эти дурацкие учебные программки про студентов и преподавателей. Самым верхним уровнем, и самым абстрактным будет класс студент и класс преподаватель со своими методами. В книжке это называется сущностями. Сущности у нас стоят на самом верху и должны быть независимы. Единственная причина менять сущности это изменение сущностей. Ниже располагаются варианты использования. Это алгоритмы которые используют сущности. Ну например, препод оценивает знания студента и выставляет оценку. Если много плохих оценок студента отчисляют и он идет служить в армию. Эти алгоритмы зависят только от сущностей и от самих себя. Ниже должен располагаться слой адаптеров для интерфейсов ввода данных. Он нужен для абстрагирования от способа хранения и предоставления данных. Допустим наше приложение хранит данные в MsSQL. Но злые американцы сказали что через неделю все MsSQL в стране превратятся в тыкву. Что может помочь не потерять данные об успеваемости студентов. Конечно слой абстракции. Приложение не должно зависеть от базы или веб фреймворка. Это похоже на уровень драйверов в операционной системе. И нижнем уровнем являются интерфейсы для ввода данных и для вывода, всякие базы, фреймворки и другие штуки. Конечно не обязательно так заморачиваться и лепить аж 4 слоя абстракций для простого софта. Можно и бизнес логику в базу положить, многие так и делают. Но если предполагается вносить изменения в приложение и не испытывать боль то стоит это сделать.
В итоге, чтобы быть счастливым разработчиком, надо отделять процессы от деталей реализации. Возможно этот принцип работает и не только в программировании.