Чистый код, SOLID, паттерны и рефакторинг

Чистый код, SOLID, паттерны и рефакторинг


1. Есть один монолит на Java 11. Он содержит системы, которые надо вынести. С чего бы начал?

2. У нас есть SOLID и есть множественная имплементация. С одной стороны говорят дробите, с другой принцип единой ответственности, как решить этот диссонанс?

3. Метод, в котором 150 if-ов, где сравниваются строки. Как отрефакторить?

4. Сервис А должен сходить в Сервис Б. Они не знают API друг друга. Какой паттерн помогает им понять?

5. Планирование архитектуры между несколькими сервисами. (нужно смотреть фотографию) Как бы ты создал Контракт взаимодействия между сервисом egrn и внутренними клиентами. И между egrn и внешним сервисом Росреестр.

6. В первом сервисе произошло событие, закоммитили в БД, нужно отправить сообщение в кафку. Кафка реализует мост at least once т.е. может много сообщений в кафку. Если транзакция закоммителась мы должны гарантированно другому сервису сообщать, что событие произошло. Какие паттерны реализовать?

7. Общаемся с сервисом по REST, получили сетевую ошибку, кажется, что можно вызывать заново. Что настроить на своей стороне? - паттерн Retry - Если соседний сервис очень слабый, то постоянный retry еще больше его положит - увеличить промежутки времени между retry или паттерн circuit breaker

8. Какие концепции в SOLID вы считаете самыми важными? А какими иногда в угоду бизнеса, скорости можно пренебречь?

9. Принцип Open-closed подразумевает изменение не только через наследование или имплементацию интерфейсов. Он про то, что старый код не надо трогать, но можно расширять. Кроме Enum, как еще можно расширить старый код? (адаптеры, декораторы собесещующему не подошли)

10. Создали абстрактный терминал класс и у него есть метод по работе с картой. Нужно реализовать этот абстрактный класс?

11. У нас есть метод, он большой, мы используем его и в какой-то момент решили сделать новую реализацию и она решает ту же задачу, в том же классе, просто чуть отличается (из 100 строк, одна отличается), будем копировать или декомпозировать?

12. Когда мы занялись декомпозицией, очевидно у нас из одного метода - появилось 3, один занимается первой частью, второй = второй частью, а третий = это такая точка входа для внешней функции, мы туда явно должны будем как-то передать аргументы и какова вероятность, что они будут теми же самыми?