Comments 17
Книга в первую очередь предназначена для архитектора решений, но будет полезна и разработчику.
Не соглашусь. Книга в первую очередь для разработчиков, так как архитектора еще надо найти, а код писать надо. Также надо понимать, что хочет архитектор, если уж его нашли. Погружение в проблематику, так сказать.
Роберт Мартин охватывает в книге 50+ лет опыта разработки
30+ лет: с конца 60-х по 90-е.
Здравствуйте,
> Книга в первую очередь предназначена для архитектора решений, но будет полезна и разработчику
В этом предложении во главу поставил я поставил архитектора, потому что не каждый разработчик обязан заниматься архитектурой, что сложнее сказать об архитекторе. Говоря на тему какая роль, что должна выполнять я могу сослаться на классификацию EPAM, т.к. у этой компании опубликованы некоторые грейды. Вот например у разработчика "able to create design, technical and project documentation" начинается лишь с L3.Senior. См. https://github.com/gm-soft/knowledge-base/blob/master/management/2019-09-08-developer-skill-matrix.md#software-developer-skill-matrix-epam
Соглашусь, что книга действительно очень полезна разработчику. Да и вопрос, для кого книга больше предназначалась, по-моему дискуссионный
>Роберт Мартин охватывает в книге 50+ лет опыта разработки
Процитирую книгу: "Свою первую строку кода я написал в 1964 году, в 12 лет. Сейчас на календаре 2016-й, то есть я пишу код уже больше полувека." У вас есть какая-то более подробная информация, чем он занимался с 90х по 2016й?
Во, вспомнил, Software Architect, называется должность, когда архитектура строиться от кода.
2. Я имел ввиду не весь опыт Роберта, а только тот который описан в книге, там все заканчивается в 90х. Чем дальше занимался Дядюшка Боб я не в курсе.
Речь не об этом интервью случайно? - https://www.youtube.com/watch?v=LhEVDvmm8SE
Если есть другое интервью, было бы интересно посмотреть
Чем дальше (чем больше и сложнее системы), тем больше смежных областей необходимо понимать. Бизнес требования и техническое исполнение идут рука об руку ради оптимизации сроков и расходов.
По поводу Order и ActiveOrder. Не лучше ли сделать одну дто Order и в ней атрибут status (created, paid, cancelled и тп)? В итоге получится две ручки: 1) get /orders/{id} и 2) get /orders?onlyActive=true
Ответ тут зависит от вопросов, которые есть выше в статье: «При дальнейших доработках наших методов оба объекта заказа будут развиваться одинаково?» или «Ответу одного метода потребуется один набор полей, а ответу другого метода — другой набор новых полей?», «Потребители методов getOrder и getActiveOrders одинаковые или разные?».
Например представим, что в вашей системе ActiveOrder потребляется только мобильным приложением для курьера, а Order клиентом бэк-офиса. Например бухгалтером. Наверняка курьеру важны одни атрибуты заказа - время доставки, адрес итд. А бухгалтеру совсем другие - стоимость, налог. Следовательно правильно было бы использовать разные DTO.
Я понял, видимо, вы имеете в виду, когда совсем разного рода информация о заказе (курьерская, бухгалтерская, фискальная). Тогда понятно, это могут быть даже разные микросервисы: здесь точно разные ручки и разные дто. Но по статусам (активный, неактивный) дто я бы делить не стал :)
По поводу фреймворков. В статье написано, что бизнес-логика не должна зависеть от фреймворка. На деле получается не так. Потому что, сначала выбирается фреймворк (Spring, OSGi и т.п.), а потом пишется бизнес-логика. Тоже самое с выбором платформы: Java, Python и т.п.
Но если бизнес-логика пошла вразрез с фреймворком, тогда выбираешь новый фреймворк и новый сервис пишешь на нём, а старый забываешь - обычно делаем так.
В книге Роберт Мартин тоже упоминает про основополагающие фреймворки типа Spring'а. И подтверждает, что такие фреймворки сложно отнести на внешний слой архитектуры. Речь идет видимо о менее значимых фреймворках. Например о фреймворке для логирования. Его проще разделить интерфейсом от бизнес-логики, т.к. набор операций такого фреймворка ограничен и сводится лишь к записи в лог.
Небольшое замечание - все же высокоуровневый дизайн обычно называют HLD, HAL обычно используют для hardware abstraction level
Зачем системному аналитику читать «Чистую архитектуру» Роберта Мартина