Как стать автором
Обновить

Комментарии 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й?

1. Если опираться на тот же EPAM, то архитекторы там не занимаются там, что говорят разрабам как им писать код, где какие интерфейсы ставить и как их реализовывать. Об этом могу судить по интервью с архитектором EPAM. В книге же, даются базовые основы о том как правильно заниматься архитектурой приложения которое он пишет. На мой взгляд Solution Architect занимается немного другими делами.
Во, вспомнил, 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.

Если курьеру нужны одни атрибуты, бухгалтеру - другие, тогда делаем enum Expansion (Courier, Accountant), далее клиент передаёт его в реквест-параметре, а сервер добавляет соотвествующие атрибуты в дто Order. Плюсы: меньше сущностей.

Не всегда. В книге об этом говорится (или это в «чистом коде»?). Есть моменты которые могут казаться одинаковыми, но в дальнейшем их пути расходятся, и поэтому не стоит торопиться их объеденять. Как выше уже и ответили.

Я понял, видимо, вы имеете в виду, когда совсем разного рода информация о заказе (курьерская, бухгалтерская, фискальная). Тогда понятно, это могут быть даже разные микросервисы: здесь точно разные ручки и разные дто. Но по статусам (активный, неактивный) дто я бы делить не стал :)

По поводу фреймворков. В статье написано, что бизнес-логика не должна зависеть от фреймворка. На деле получается не так. Потому что, сначала выбирается фреймворк (Spring, OSGi и т.п.), а потом пишется бизнес-логика. Тоже самое с выбором платформы: Java, Python и т.п.

Но если бизнес-логика пошла вразрез с фреймворком, тогда выбираешь новый фреймворк и новый сервис пишешь на нём, а старый забываешь - обычно делаем так.

В книге Роберт Мартин тоже упоминает про основополагающие фреймворки типа Spring'а. И подтверждает, что такие фреймворки сложно отнести на внешний слой архитектуры. Речь идет видимо о менее значимых фреймворках. Например о фреймворке для логирования. Его проще разделить интерфейсом от бизнес-логики, т.к. набор операций такого фреймворка ограничен и сводится лишь к записи в лог.

Роберт довольно четко определяет отношение к фрейморкам в 32 главе «Фреймворк — это деталь». Одна глава не особо поможет, лучше почитать книгу ;)

Небольшое замечание - все же высокоуровневый дизайн обычно называют HLD, HAL обычно используют для hardware abstraction level

Судя по цитируемости HLD вижу, что распространенный термин. Надо взять на вооружение

Зарегистрируйтесь на Хабре, чтобы оставить комментарий