Читал ли книги по архитектуре, например Мартина
Что проверяют
Не факт прочтения, а способность обсуждать архитектуру своими словами и применять идеи к Go. Вопрос обычно открывает разговор о том, как вы режете код на пакеты и почему. Ответ «не читал» не провал, провал это пересказ оглавления без единого примера из своей практики.
Как отвечать
Сначала уточните, о ком речь: у Роберта Мартина «Чистая архитектура» и «Чистый код», у Мартина Фаулера «Рефакторинг» и «Архитектура корпоративных приложений». Разные авторы и разные книги, путаница слышна сразу.
Дальше свяжите принципы с идиомами Go, где они выглядят иначе, чем в Java:
- зависимости смотрят внутрь, доменный пакет ничего не знает про базу и HTTP;
- интерфейс объявляется на стороне потребителя, а не рядом с реализацией, поэтому получается узким;
- «принимай интерфейсы, возвращай структуры», зависимости передаются параметрами конструктора, контейнер внедрения не нужен;
- композиция вместо наследования, встраивание структур вместо иерархий;
- пакеты делятся по предметной области, а не по техническому слою: пакет
service, куда сложено всё подряд, это не архитектура.
Хорошо назвать место, где вы сознательно отошли от книги: например, не завели слой репозиториев ради одного запроса. В Go считается, что немного дублирования дешевле лишней зависимости.
Где спотыкаются
Отвечают «да, читал Мартина» и не могут назвать ни одного принципа, кроме самой аббревиатуры SOLID. Дальше спрашивают, что означает буква L и как она выглядит в языке без наследования, и разговор заканчивается.
Второе: тащат в Go структуру проекта из другого языка. Пять уровней вложенности, интерфейс на каждую структуру и генерация моков на всё подряд превращают чтение кода в бесконечную навигацию по определениям.
Третье: путают чистый код и чистую архитектуру. Первое про именование, размер функций и тесты, второе про границы и направление зависимостей, и на вопрос об архитектуре кандидат отвечает рассуждением о длине методов.