StringConcat - разработка без боли и сожалений
前往频道在 Telegram
Полезный блог от разработчиков для разработчиков. Наш сайт: howto.stringconcat.ru
显示更多3 778
订阅者
-224 小时
-87 天
+6030 天
正在加载数据
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
十一月 '2611月 '26
十一月 '26
+5
在0个频道中
十月 '26
+97
在0个频道中
Get PRO
九月 '26
+67
在0个频道中
Get PRO
八月 '26
+23
在0个频道中
Get PRO
七月 '26
+14
在0个频道中
Get PRO
六月 '26
+24
在0个频道中
Get PRO
五月 '26
+33
在0个频道中
Get PRO
四月 '26
+35
在0个频道中
Get PRO
三月 '26
+91
在0个频道中
Get PRO
二月 '26
+130
在0个频道中
Get PRO
一月 '26
+168
在0个频道中
Get PRO
十二月 '25
+62
在0个频道中
Get PRO
十一月 '25
+55
在0个频道中
Get PRO
十月 '25
+165
在0个频道中
Get PRO
九月 '25
+88
在1个频道中
Get PRO
八月 '25
+227
在0个频道中
Get PRO
七月 '25
+275
在0个频道中
Get PRO
六月 '25
+209
在0个频道中
Get PRO
五月 '25
+158
在1个频道中
Get PRO
四月 '25
+45
在1个频道中
Get PRO
三月 '25
+42
在0个频道中
Get PRO
二月 '25
+29
在0个频道中
Get PRO
一月 '25
+34
在0个频道中
Get PRO
十二月 '24
+68
在0个频道中
Get PRO
十一月 '24
+47
在0个频道中
Get PRO
十月 '24
+70
在0个频道中
Get PRO
九月 '24
+97
在0个频道中
Get PRO
八月 '24
+150
在1个频道中
Get PRO
七月 '24
+100
在1个频道中
Get PRO
六月 '24
+35
在0个频道中
Get PRO
五月 '24
+27
在0个频道中
Get PRO
四月 '24
+30
在0个频道中
Get PRO
三月 '24
+47
在0个频道中
Get PRO
二月 '24
+42
在0个频道中
Get PRO
一月 '24
+60
在1个频道中
Get PRO
十二月 '23
+56
在0个频道中
Get PRO
十一月 '23
+64
在1个频道中
Get PRO
十月 '23
+107
在0个频道中
Get PRO
九月 '23
+245
在0个频道中
Get PRO
八月 '23
+94
在0个频道中
Get PRO
七月 '23
+63
在0个频道中
Get PRO
六月 '23
+142
在0个频道中
Get PRO
五月 '23
+319
在0个频道中
Get PRO
四月 '23
+281
在0个频道中
Get PRO
三月 '23
+55
在0个频道中
Get PRO
二月 '23
+35
在0个频道中
Get PRO
一月 '23
+68
在0个频道中
Get PRO
十二月 '22
+27
在0个频道中
Get PRO
十一月 '22
+18
在0个频道中
Get PRO
十月 '22
+42
在0个频道中
Get PRO
九月 '22
+24
在0个频道中
Get PRO
八月 '22
+40
在0个频道中
Get PRO
七月 '22
+41
在0个频道中
Get PRO
六月 '22
+34
在0个频道中
Get PRO
五月 '22
+53
在0个频道中
Get PRO
四月 '22
+13
在0个频道中
Get PRO
三月 '22
+13
在0个频道中
Get PRO
二月 '22
+26
在0个频道中
Get PRO
一月 '22
+17
在0个频道中
Get PRO
十二月 '21
+28
在0个频道中
Get PRO
十一月 '21
+20
在0个频道中
Get PRO
十月 '21
+191
在0个频道中
Get PRO
九月 '21
+41
在0个频道中
Get PRO
八月 '21
+58
在0个频道中
Get PRO
七月 '21
+130
在0个频道中
Get PRO
六月 '21
+39
在0个频道中
Get PRO
五月 '21
+236
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 06 十一月 | +2 | |||
| 05 十一月 | +1 | |||
| 04 十一月 | 0 | |||
| 03 十一月 | 0 | |||
| 02 十一月 | +1 | |||
| 01 十一月 | +1 |
频道帖子
За примерно 17 лет наблюдений за айтишечкой неизменными остаются две вещи:
- Производимый нами софт остаётся неподдерживаемым говном.
- Поиск священного грааля, который наконец-то позволит победить пункт 1, не прекращается ни на секунду.
Обещаний мы уже видели немало: микросервисы, агиле, бигдата и прочее. Изменилось ли что-нибудь, кроме того, что мне теперь надо разворачивать по 50 микросверисов на приложение, которое умеет примерно ничего?
В этот раз как будто бы ситуация иная, потому что мы якобы смогли скинуть часть когнитивных функций на электронного дурака (тут кстати был шквал новостей про взлом ИИшкой все и вся, хочу про это тоже рассказать как-нибудь, не переключайтесь).
За последние два-три года наблюдений за этой гонкой я пока не заметил, чтобы качество поставляемого софта заметно выросло. Да и скорость разработки, если смотреть на конечный результат, тоже не особо изменилась. Как поставляли каловые массы, так и продолжаем, только теперь с использованием нейросетей.
Также знаю кучу контор из серии «мы купили серваки, они загружены под 146%, но почему-то стало медленнее». Вангую, что через пару лет увидим распродажу этого железа под соусом: «Вы три года гоняли железки, жгли электричество, а выхлоп отрицательный. Закрываем этот балаган».
У нас, авторов канала, подход несколько скучнее.
Вместо того чтобы строить очередную «фабрику» по производству софта, стоит сначала разобраться, из чего вообще состоит этот конвейер. Попробовать автоматизировать или упростить отдельные операции с помощью ИИ. Например, мы уже убрали механический кодинг там, где решение заранее известно и не требует от разработчика даже просыпаться (можно вообще этот код писать спинным мозгом).
А дальше — постепенно, шаг за шагом, смотреть, что ещё можно улучшить. В общем, обычная инженерная эволюция.
Вспомните Ford Model T и сравните его с современным автомобилем. Из общего у них, пожалуй, только четыре колеса и руль. За это время изменилось практически всё. Вместо простого планетарного механизма трансмиссии появились механические коробки с синхронизаторами, а затем и автоматические. Карбюратор уступил место распределённому, а потом непосредственному впрыску топлива. Механическое зажигание сменилось электронным управлением двигателем. Барабанные тормоза — дисковыми с ABS и системами стабилизации (но не у Нивы, хехе). Изменились подвеска, рулевое управление, конструкция кузова и пассивная безопасность. А поверх всего этого появился целый слой электроники, датчиков и управляющих систем. Это результат долгой инженерной эволюции: постепенно меняли отдельные узлы, решали конкретные проблемы, проверяли решения и двигались дальше.
Характерный симптом очередного поиска грааля — повсюду графики в духе «УОУУУ, 100500 токенов в секунду!», но почти нигде нет рассказов о проблемах, ограничениях и личном опыте использования конкретных моделей в реальной работе. А в комментах на хабре мусолят очередную модную тему, которая НУ ОБЯЗАТЕЛЬНО СРАБОТАЕТ.
Сколько задач удалось решить? Где модель облажалась? Что пришлось переделывать? Сколько времени в итоге сэкономили? Вот это было бы гораздо интереснее очередного рекорда производительности.
Если не хотите гоняться за моделями и харнесами, попробуйте для начала перестать быть оператором LLM и заняться инженерией. Разобраться в процессе, понять, где действительно есть проблемы, и попробовать их решить. Возможно, это даст гораздо больше пользы, чем очередная модель с прибавкой 0.3 к бенчмарку.
| 2 | Как и обещал, небольшой постик/зарисовка с работы про т.н. справочники в контексте DDD. Основная проблема — непонятно куда их приделывать, так как в парадигме DDD никаких справочников не наблюдается. Разбираемся что это такое и где их место
Читать тут. | 1 323 |
| 3 | Пока пишу очередной пост в бложек, который внезапно оказался душнее и длиннее, чем планировалось (а еще конфа наложилась, поэтому прошу понять и простить), поделюсь наблюдением с работы.
В одном из материалов я говорил, что сращивание команды может занимать до полугода. Это очень примерно: если у нас стандартная команда человек на десять с нормальной квалификацией, то такой срок выглядит вполне реалистично. Но вот прямо сейчас наблюдаю, как это правило ломается. Команда меньше чем за месяц научилась выдавать результат. Причём без написания душных спецификаций (которые нужны только для того чтобы о чем-то договориться), дизайн-доков и прочего корпоративного эпоса. И даже без каких-либо четко зафиксированных требований — ввиду исторического контекста приходится выяснять все это на ходу.
В чём прикол?
Кажется, дело в том, что людям удалось довольно быстро договориться между собой, выработать общий язык и подходы к работе. А это ИМХО, возможно только в том случае, когда каждый готов иногда выйти за пределы своих непосредственных должностных обязанностей. Не в смысле «давайте теперь все делают всё», а в смысле «я вижу проблему, понимаю, что нужно сделать, и готов помочь, даже если формально это не моя зона ответственности» (противоположность этому — «тут запятая стоит неправильно, я ничего делать не буду», наблюдал неоднократно).
Ну и ещё один важный момент: людям действительно интересно разобраться, что нужно сделать и как оно должно работать (и в предметке разобраться, О УЖАС!). А не просто получить спеку, реализовать написанное и передать результат по цепочке дальше.
В общем, если у вас есть такие сотрудники — целуйте их в задницу. Ещё интенсивнее, чем обычно. | 1 929 |
| 4 | В старину я ходил на Joker чтобы послушать умных людей и вдохновиться, в этом году зачем-то позвали позатирать меня. Если вы на болотах, то можете попялиться на меня завтра (а если не на болотах, то онлине). | 2 171 |
| 5 | Если кто вдруг пропустил (и не подписался на наши ютубы, айяйяй), спешу сообщить что намедни вышел ролик про наши мучения успехи относительно работы с ИИ. В видосе как мой опыт, так и опыт товарищей по несчастью коллег из отрасли. Приятного просмотра
Смотреть YouTube | ВК | 2 140 |
| 6 | Вы не заметили, но в интернетах разразился скандал вселенского масштаба. Вопрос вот в чём: «Можно ли брать iced coffee на интервью?»
Казалось бы, спор и яйца выеденного не стоит, но нет.
Позиция многих HR-ов: «Приносите кофе на интервью — так мне не надо тратить час времени на то, чтобы вас отсеять». Сравнивают это с тем, чтобы прийти с родителями на собеседование. И вообще обвиняют в легкомыслии и в том, что кандидат не считает интервью чем-то особенным.
Позиция противоположного лагеря сводится к тому, что, может быть, на собеседовании будем оценивать навыки? И если стакан латте перевешивает опыт и компетенции, то собеседование, возможно, провалил работодатель.
Хотел спросить: «А как бы отнеслись в вашей компании к кандидату с iced coffee?»
У нас бы даже не заметили. Но если бы я пришёл на интервью с кофе, мне было бы немного некомфортно от того, что я могу что-то пить, а противоположная сторона вынуждена глотать слюнки.
В общем, высказывайтесь в комментариях, да разверзнутся небеса! | 2 211 |
| 7 | А сегодня снова не совсем обычный пост (пока я занят написанием духоты).
Знаю, что у многих подписчиков есть собственные каналы, а кто-то задумывается о том, чтобы изготовить из себя личный бренд. Поскольку мы занимаемся чем-то похожим и у нас есть опыт помощи другим, я решил оформить это в виде небольшого гайда, в течение которого буду всячески отговаривать вас заниматься подобными вещами.
Если будет интересно, в следующем посте обсудим монетизацию.
Как стать инфоцыганом
А если вам нужно подушнее, то рекомендуем к ознакомлению:
- Кто мы такие (открытый пост)
- Полное руководство по Value Objects (открытый пост)
- DDD в машинном обучении - опыт реального проекта
- Как собрать команду мечты | 2 005 |
| 8 | Сегодня необычный выпуск — подкаст с нашим старым бро Константином Могилевкиным.
Константин — IT-предприниматель, в айтишечке с незапамятных времён, как и мы.
Разговариваем за бизнес, за жизнь, за то, как в нынешних непростых условиях оставаться на плаву, как немного лутануть бабосиков и причем тут ДэДэДэ.
Смотреть: YouTube | ВК | 1 978 |
| 9 | Я частенько в своих постах упоминаю ключевую характеристику для сотрудника — автономность. Хотелось бы проиллюстрировать реальным примером, как это может выглядеть.
Ситуация следующая. Сотрудник взял микроотпуск на один день. Чтобы ничего не простаивало — дела были переданы другому, так как задача важная и горящая.
И вот примерно такая переписка происходит перед его уходом:
— По колбекам: там короче внешняя система пытается нам колбек отправить, но, как и выяснилось, у неё нет доступа. Нашли в логах пример того, что она пытается нам отправить — приложу в тикет. Ещё в логах нашёл полный объект, который она пыталась отправить
— Ещё нашёл заметки предыдущего разработчика по раскопкам этой шляпы. всё сюда приложил: и раскопки по реализации колбеков, и пример из логов
— Ещё на почту отправил тебе куски исходников этой системы, если вдруг захочешь в них разобраться. К логам ты сам доступа, скорее всего, не получишь, но вот человек, который может посмотреть
— Задачу на тебя перекинул на понедельник, чтобы не потерялась. убежал, хороших выходных 💖
Вместо того чтобы сказать «да сами разберетесь», было предусмотрено всё, чтобы работа не простаивала. Вот вам исходники, логи теребить через вот этого чела, вот что уже накопал, вот задача, чтобы не потерялась. Причём никто не просил его составлять какой-то план передачи дел, тем более на один день. Он просто сам подумал, что понадобится человеку, который будет разбираться с задачей без него. Если у вас есть такой сотрудник — целуйте его в жопу. | 1 770 |
| 10 | Продолжаем обзор микросервисных изделий. На этот раз подписчики прислали мне архитектуру, состоящую примерно из сотни микросов. Вы скажете: а что такого? Где 80, там и 100, невелика разница. Но есть маааааленький нюансик. Это — коробочное решение, то есть программа, которая продается в товарных количествах.
Как-то я имел возможность делать подобные штуки, и там было далеко не 100 микросервисов, а до десятка. В чем прикол — обновлять у клиента руками админов, которые не читают инструкции — это отдельное развлечение.
Классика: не прочитали инструкцию, перепутали порядок установки, не вписали настройки (или вписали, но не те), забыли перезапустить и много других приколов. А если еще они пропустили несколько обновлений — то жди беды. А если что-то у клиента сломается, то вообще концов не найдешь. Проблема даже получить целостные логи.
Высший пилотаж — обновление без простоя, но, учитывая, кто это будет делать, — лучше не надо. Отчасти это решается скриптами автоматизации, контейнеризацией и прочим, но не до конца. Мы сначала передали поддержку (развертывания и обновления) вендору, но он через некоторое время исчез и перестал отвечать (интересно, почему?).
Поэтому мне сложно представить, каково это — поддерживать коробочное решение из сотни микросов. Может, сейчас появились какие-то модные практики, но, глядя на то, как работает куча вендоров, как будто бы ничего не поменялось. | 1 565 |
| 11 | Начинаем сезон видосиков с обзора карьерных путей (не переживайте, духота тоже будет, но попозже).
Обозрел основные ветки развития на собственном опыте: успел поработать практически во всех ролях и рассказываю, как там дела, куда расти и чего вообще ждать.
Смотреть YouTube | VK | 1 737 |
| 12 | В комментариях к предыдущему посту читатели оставили пару комментов. Они интересные, поэтому давайте разберём. Кратко передам суть первого:
VO на практике бывает очень локальным, поэтому не всегда есть смысл их выделять в отдельные классы и можно вообще оставить.
То, что логика локальная, — это не значит, что её необходимо оставлять как есть (иначе получатся анемичные объекты с логикой в агрегатах). Конкретно в моём случае эта логика постоянно переиспользовалась в разных местах, в том числе за пределами агрегата (для построения графиков, отчётиков и т. д.).
Сам VO распространяется не на все контексты — ограничение таки есть (это сам контекст как раз). Также в тексте есть про общие типы, которые могут использоваться везде. Это как раз норм, так как логика 100% всегда одинаковая (email он и в Африке email), но там тоже есть оговорки (подробнее в статье).
Второй комментарий придётся разобрать по частям.
Получается, во-первых, что VO должен что-то знать об объектах, из которых он может быть сконвертирован (например, IP-адрес знает о том, что может быть создан из строки и о формате этой самой строки),
В целом это норм, обычно на практике проблем не вызывает. При работе с VO мы примерно представляем, из чего собирается объект (email — строка, денежка — double BigDecimal). Если есть проблемы с тем, во что сериализовывать и десериализовывать, — можно воспользоваться механизмом функций-расширений (об этом тоже есть в статье).
VO должен заботиться о том, чтобы отдать клиенту ошибку создания в красивом и понятном виде. А в этом последнем трудно соперничать со специальными инструментами валидации, которые готовы тебе указать локализацию вплоть до json-path свойства и позиции в строке.
Вот как раз-таки и не должен. У VO клиент — это вызывающий его код, а не конечный потребитель. Вы бы знали, сколько раз я переделывал с JSON-ов не на JSON-ы и обратно, подключал вообще не HTTP-каналы и т. д. Если логика отображения заложена в VO, вы никогда больше не сможете поменять бизнес-логику, потому что «ой-ой, у нас отображение формочки сломалось».
Плюс множество встроенных валидаторов этих инструментов, которые придётся тогда игнорировать и велосипедить.
«А минусы?» Тут возникает проблема — а какой валидатор брать? Спринговый? Хиберовский? Ещё какой-то? Выпилили/обновили Хибер — а что теперь делать? Поэтому вся логика валидации аккуратно запихана в сам домен. Вообще мы используем инструмент для валидации в виде ArrowKt, про это тоже есть в посте. Он действительно упрощает сбор ошибок, и мы считаем его частью домена на системном уровне.
На другой стороне инфраструктуры (ORM) тоже достаточно заморочек с сериализацией/поиском по ValueObject. Entity Framework дотнетовский за последние годы многому в этом направлении научился, но всё равно сохраняются ограничения на применимость VO-подхода "мощностью" нижележащего ORM-фреймворка.
Собсна, в этом и заключается суть чистой архитектуры — отделить инфру от домена. Очень любим такой подход, потому что уже наелись. Про сохранение тоже в статье было — проблем, как правило, не вызывает, если умело пользоваться. | 1 553 |
| 13 | Знаем, что большинству удобнее читать текст, чем смотреть видосики, поэтому решили выложить в открытый доступ текстовую версию видосов про Value Objects.
Внутри — примеры из реальных проектов с логикой чуть сложнее, чем просто валидация, а ещё разбор такого явления, как коллекции в виде VO.
P.S. Если найдёте опечатку или какой-нибудь косяк — пишите прямо там, в комментах. Мы вроде всё вычитывали, но где-то на 35-й странице внимание начинает немного угасать
Ну и ставьте лойсы и делитесь постом. Если такой формат зайдёт — будем делать больше текстовых материалов. | 1 399 |
| 14 | Notebook → прод, метод на 1000 строк, цикл в цикле в цикле, никто не понимает что происходит - это классика от MLщиков. Мы применили DDD и чистую архитектуру к реальному ML-проекту. Value Objects, агрегаты, доменные сервисы, порты — на конкретных примерах кода (осторожно, петухон).
Читать что получилось → | 1 920 |
| 15 | Я на работе запилил такое правило — мы работаем с подходом Monolith First. Это когда мы сначала запиливаем монолит, а потом нарезаем его по мере необходимости. Тут даже не то чтобы правило, меня прям бомбить начинает от слова «микросервисы».
А всё почему? Да потому что вы, наверное, помните офигительную историю про 80 микросервисов. Выяснилось, что, чтобы собрать эти 80 микросов, нам нужно 220(!) репозиториев. Ну а вендор, который продал это чудище, просто сказал: «У меня лапки, я не могу поддерживать это больше». Даже развернуть на новом стенде оказалось нереально.
И тут хорошо видна ещё одна проблема с вендорами. Мы обычно думаем, что покупаем у них продукт, который потом будем несколько лет развивать и поддерживать. А вендор зачастую думает, что он делает проект. Есть набор задач, за который ему заплатили, — надо этот набор и закрыть. Что будет с системой через два года, когда её придётся обновлять, развивать или просто развернуть на новом стенде, — это уже как бы отдельная история (обычно после нас хоть трава не расти).
Получается интересная ситуация: мы строим продукт, а вендор закрывает проект. И вот из таких проектов потом и вырастают 80 микросервисов, 220 репозиториев и система, которую уже никто не может нормально собрать.
Зато как красиво звучали слова про масштабируемость (наверное). | 2 179 |
| 16 | Как ИИ превратил плохих менеджеров в плохих разработчиков
Не знаю, как у вас, но у меня с появлением ИИ собеседования превратились в боль.
Раньше плохих разработчиков можно было отсеять ещё на этапе тестового задания. Сейчас любое тестовое выполняют как минимум на «сойдёт»:
— пользоваться ИИ не запретишь;
— какое-никакое решение он всё-таки состряпает.
Поэтому количество очных собеседований у нас выросло в разы.
Но недавно я столкнулся с новым типом кандидатов: плохими менеджерами, которые с помощью ИИ переквалифицировались в плохих разработчиков.
Попался мне один такой. Рассказываю.
Читаю резюме — вроде всё нормально, но нет какого-то коннекта на уровне «свой — чужой». Чувствую подвох. Резюме слишком вылизано, в достижениях слишком много бизнесовых показателей. Разработчики обычно так не пишут.
Открываю тестовое — и там тоже на первый взгляд всё хорошо. Но вместо Gradle вижу build.sh, который заканчивается командой:
javac -d "$BUILD_DIR" "@$SOURCES_FILE"
Уже подозрительно.
На собеседовании выяснилось, что кандидат работал менеджером разработчиков в крупном криптостартапе. После внедрения ИИ многих менеджеров там заставили писать код.
В ядро продукта их, конечно, никто не пустил, но поручили делать сопутствующие инструменты — например, для KYC.
На собеседовании кандидат не смог реализовать ни одного бизнес-требования. А когда мы попросили отрефакторить компонент бизнес-логики и сделать его немного более объектно-ориентированным, он почему-то начал рассуждать про JSON.
В общем, будьте внимательны. Обязательно просите кандидатов писать код прямо на собеседовании. Я все так же против того, чтобы заставлять на собеседованиях вертеть деревья. Но отрефакторить свой код, заимплементировать фичу и написать на это тест кандидат, имхо, обязан.
И на сладкое.
Файл с тестовым заданием назывался ATM-final-v6. Внутри лежал Git-репозиторий с одним-единственным коммитом.
Ну а что? В требованиях было сказано использовать Git. Вот, пожалуйста, использовал.
Расскажите в комментариях как ИИ повлиял на процессы собеседований в ваших командах | 2 117 |
| 17 | Тут опять произошло прекрасное.
Исследователи из JFrog решили проверить, что там с найденными (как выяснилось, в основном ИИ) уязвимостями в SQLite, и оказалось, что из 55 зарегистрированных CVE реальной была всего одна, а остальные — обычные галлюцинации ИИ: тут и выдуманные методы, и несуществующие пути эксплуатации, и нерабочие эксплоиты, и прочие радости жизни. Самое фиговое, что эти уязвимости уже успели попасть в CVE. То есть в следующем релизе вполне возможно, что какой-нибудь сканер начнет сношать вам мозг относительно критической уязвимости, которой никогда не существовало.
Можно подумать, что ИИ тут бесполезна. Но нет.
На мой взгляд, ИИ сейчас довольно неплохо работает там, где есть четко сформулированные правила, которые можно проверить. Например, при разработке агрегатов и инвариантов к ним. Можно попросить ИИ оценить белые пятна: не нарушается ли владение объектами, не забыли ли мы проверить уникальность, нет ли сценария, при котором агрегат может попасть в неконсистентное состояние и все в этом духе. Понятно, что это не магический анализатор, который найдет все проблемы. Но результаты иногда бывают довольно неожиданные и реально полезные. Как минимум, помогает посмотреть на модель с другой стороны и найти потенциальные баги до того, как они доедут до прода.
Вторая полезная штука — проверить наличие или отсутствие проверок безопасности. Но тут есть важный момент (и, кстати, он справедлив и для первого случая). Эти проверки должны быть единообразны и желательно централизованы.
Условно, если у вас простая модель разделения доступа, то на каждом контроллере должна быть аннотация @Secured (или что-то подобное), а не где-то глубоко в DAO. Иначе вы просто сожжете токены ибо ИИ не сможет понять, что именно является правилом, а что случайностью.
Вообще, для таких критичных вещей я большой фанат подхода fail fast. В одном из проектов мы сделали следующим образом: если в конфигурации явно не задано, какая роль нужна для контроллера (или он не добавлен в список исключений), приложение просто не стартует. Что-то вроде: .addRole(SomeController::method, Roles.ADMIN)
Но это довольно примитивный случай. Проблемы начинаются дальше. Например, нам нужно проверить не просто наличие роли, а доступ к конкретному ресурсу. Пользователь может видеть только свои счета, свои документы и т.д. Тут уже одной аннотации с ролью на контроллере может быть недостаточно. И вот здесь как раз хорошо работает комбинация из архитектурных правил, статического анализа и ИИ. Допустим, мы договариваемся, что любой Use Case, который работает со счетом, обязан использовать интерфейс безопасности: CheckHasAccountAccess(accountUID)
Дальше можно кастомный статанализатор (мы так делали, дописывали правила уже к существующему), который будет проверять наличие такого вызова (и имеет ли он вообще отношение к сущностям, над которыми происходит действие), можно ронять сборку при нарушении правила, а еще можно попросить ИИ проверить не упустили ли мы чего.
Конечно, это не панацея и не заменяет нормальные тесты и security review. Но вероятность забыть критичную проверку становится заметно ниже. Мне вообще кажется, что именно в этом сейчас одна из самых сильных сторон ИИ. Мы не пытаемся заставить его быть магическим сканером уязвимостей, который найдет неизвестную дыру в миллионах строк кода, а использовать его как дополнительный слой контроля за тем, что ваши собственные правила действительно соблюдаются. Но для этого сначала нужно эти правила иметь . Если у вас просто сопли, размазанные по всему проекту, слоям и сервисам (99% того что я видел выглядит именно так), то ИИ просто поможет вам быстрее расстаться с бюджетом | 1 608 |
| 18 | 没有文字... | 1 593 |
| 19 | 没有文字... | 1 936 |
| 20 | А теперь первый душный пост на нашем новом ресурсе. Выжимка из опыта — как построить команду мечты.
Внутри:
- Почему команда мечты — это не 10 суперзвёзд, работающих по 16 часов (а суперзвезда вообще антипаттерн)
- Каких людей надо гнать ссаными тряпками в первую очередь
- Какие роли необходимы в команде
- Почему собес почти ничего не решает
- И как понять на нём, что перед вами хорошая команда, а не очередной филиал ада
Читать → | 2 135 |
