Last active
January 26, 2022 17:08
-
-
Save david-shiko/55048a2e067d3183fae037c0ac4e4ff8 to your computer and use it in GitHub Desktop.
Заметки чистая архитектура (Роберт Мартин)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
математика — это дисциплина доказательства истинности утверждений, требующих доказательства. | |
Наука, напротив, — дисциплина доказательства ложности утверждений, требующих доказательства | |
Структурное программирование накладывает ограничение на прямую передачу управления | |
Объектно-ориентированное программирование накладывает ограничение на косвенную передачу управления. | |
Функциональное программирование накладывает ограничение на присваивание. | |
тестированием можно доказать неправильность программы, но нельзя доказать ее правильность. | |
SOLID: | |
1. SRP: Single Responsibility Principle | |
2. OCP: Open-Closed Principle | |
3. LSP: Liskov Substitution Principle | |
4. ISP: Interface Segregation Principle | |
5. DIP: Dependency Inversion Principle | |
1. Модуль должен отвечать за одного и только за одного актора. | |
2. Программные сущности должны быть открыты для расширения и закрыты | |
для изменения. | |
Собирайте вместе все, что изменяется по одной причине и в одно время. Разделяйте все, что изменяется в разное время и по разным причинам | |
Не создавайте зависимостей от чего-либо неиспользуемого. | |
(?) | |
I: неустойчивость: I = Fan-out ÷ (Fan-in + Fan-out). Значение этой метрики | |
изменяется в диапазоне [0, 1]. I = 0 соответствует максимальной устойчивости компонента, I = 1 — максимальной неустойчивости. | |
Устойчивость компонента пропорциональна его абстрактности. | |
Nc: число классов в компоненте. | |
Na: число абстрактных классов и интерфейсов в компоненте. | |
A: абстрактность. A = Na ÷ Nc. | |
Любая организация, разрабатывающая систему, невольно будет формировать | |
дизайн, структура которого повторяет структуру взаимодействий внутри | |
этой организации. | |
Что еще меняется по разным причинам? Сами варианты использования! | |
Мы должны отделить зависимости в исходном коде от потоков данных и связать с уровнем | |
Нельзя создать универсальную инфраструктуру, не создав прежде работающую инфраструктуру. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment