0:00 О чем будет лекция 1:28 О сложности 4:04 Свойства сложных систем 8:24 Подходы к управлению сложностью 16:28 О модульности 19:46 Метрики качества модульных систем Coupling, Cohesion 22:16 Определение объекта 25:56 Свойства объекта 34:42 Про абстракцию 37:36 Про инкапсуляцию 39:55 Про наследование и композицию 43:23 Вопрос: Когда стоит применять наследование ? 44:34 Проблемы с наследованием в C++ 48:38 Как выделять объекты в предметной области 52:30 Изоляция сложности как источник для объектов 55:53 Изоляция возможных изменений как источник для объектов 1:03:12 Изоляция служебной функциональности как источник для объектов 1:05:14 Про принципы SOLID 1:06:29 (SRP) Принцип единственной ответственности 1:07:48 (OCP) Принцип открытости/закрытости 1:10:49 (LSP) Принцип подстановки Барбары Лисков 1:12:10 (ISP) Принцип разделения интерфейса 1:13:52 (DIP) Принцип инверсии зависимостей 1:20:16 Закон Деметры 1:23:48 Вопрос: О паттерне медиатор 1:26:21 Вопрос: О DI контейнерах и параметрическом полиморфизме 1:29:30 Вопрос: О принципе единственной ответственности
Про DIP у того же Мартина хорошо рассказано. Он описывает его суть как "Суть не должна зависеть от деталей". То есть в чистой архитектуре в центре бизнес сущности и правила, а на переферии - интерфейсы с пользователем, бд, другими сстемами. И вот последнее - это детали, они могут меняться в процессе сопровождения продукта, а суть системы - её бизннс-правила не вызывают детали напрямую, то есть не зависят от них. А опеделяют интерфейсы, от которых наследуются детали. Тогда изменения в деталях не трогают сердце продукта.
У Роберта Мартина в "Чистой архитектуре" про SRP сказано, что данное у вас опсание некорректно. Верно будет: "Модуль должен отвечать за одно и только за одно заинтересованное лицо" или "Модуль должен иметь одну и только одну причину для изменения". То есть не про функционал модуля, а про источник для его изменений. Там ещё пример приводится, когда двум разным акторам сначала нужен был вроде бы одинаковый отчёт, но со временем они стали расходиться, и тогда изменения для одного стали задевать другого.
Про бизннс правила интересный момент. Если они часто изменяются, как в вашем примере с банком и их продуктом, то вокруг чего должна выстраиваться архитектура? Вроде как бизнес-правила это по определению центральная сущность системы, а всё остальное желательно чтобы было более-менее легко заменяемо. Но если мы реализуем бизнес правила в виде плагинов, то что-то остаётся стабильным? Некоторый костяк системы, внутренние процессы? Что-то не имеющее отношение к бизнесу, а просто наша максимально гибкая архитектура?