ОГЛАВЛЕНИЕ
Предисловие
Почему мы написали эту книгу
Подход, ориентированный на разработчика
Что в этой книге?
Для кого эта книга?
Условные обозначения, используемые в книге
Использование примеров кода
Глава 1. Начало путешествия
Темы
Особенности Java
Разработка программного обеспечения и архитектура
SOLID
Тестирование
Структура глав
Самостоятельная работа
Глава 2. Анализатор банковских операций
Задача
Цель
Требования к анализатору банковских операций
Принцип KISS
Переменные final
Обслуживаемость кода и антишаблоны
Класс-бог
Дублирование кода
Принцип единственной ответственности
Связность
Внутриклассовая связность
Функциональная
Информационная
Служебная
Логическая
Последовательная
Временная
Связность методов
Связанность
Тестирование
Автоматизированное тестирование
Доверие
Устойчивость к изменениям
Понимание программы
Использование JUnit
Объявление метода теста
Операторы контроля
Покрытие кода
Выводы
Самостоятельная работа
В завершение
Глава 3. Расширяем анализатор банковских операций
Задача
Цель
Требования к расширенному анализатору банковских операций
Принцип открытости/закрытости
Создание экземпляра функционального интерфейса
Лямбда-выражения
Подводные камни интерфейсов
Интерфейс-бог
Слишком мизерный
Явный API против неявного
Доменный класс или примитив?
Множественный экспорт
Знакомство с доменным объектом
Объявление и реализация соответствующего интерфейса
Обработка исключений
Для чего нужны исключения?
Шаблоны и антишаблоны для исключений
Выбор между проверяемыми и непроверяемыми исключениями
Слишком специфические
Слишком однообразные
Шаблон уведомления
Методика применения исключений
Не игнорируйте исключение
Не перехватывайте «общие» исключения
Документируйте исключения
Будьте осторожны с исключениями, связанными с конкретной реализацией
Исключения против управляющего потока
Альтернативы исключениям
Использование сборщиков
Зачем нужны сборщики
Работа с Maven
Структура проекта
Пример сборочного файла
Команды Maven
Использование Gradle
Пример сборочного файла
Команды Gradle
Выводы
Самостоятельная работа
В завершение
Глава 4. Система управления документами
Задача
Цель
Требования к системе управления документами
Воплощение идеи
Импортеры
Класс Document
Атрибуты и иерархия Documents
Реализация и регистрация импортеров
Принцип подстановки Дисков
Альтернативные подходы
Поместить импортер в класс
Область действия и инкапсуляция
Расширение и повторное использование кода
Гигиена тестов
Именование тестов
Поведение, а не реализация
Не повторяйтесь
Хорошая диагностика
Тестирование ошибочных ситуаций
Константы
Выводы
Самостоятельная работа
В завершение
Глава 5. Движок бизнес-правил
Задача
Цель
Требования к движку бизнес-правил
Разработка через тестирование
Зачем нужен TDD?
Цикл TDD
Мокинг
Добавление условий
Моделирование состояния
Вывод типа локальной переменной
Switch-выражения
Принцип разделения интерфейса
Разработка текучего интерфейса (Fluent API)
Что такое Fluent API?
Моделирование домена
Шаблон Builder
Выводы
Самостоятельная работа
В завершение
Глава 6. Twootr
Задача
Цель
Требования к Twootr
Обзор разработки
Технология Pull
Технология Push
От событий к разработке
Связь
GUI — графический интерфейс пользователя
Продолжаем
Гексагональная архитектура
С чего начать
Пароли и безопасность
Подписчики и твуты
Моделирование ошибок
Твутинг
Создание моков
Верификация при помощи моков
Библиотеки для мокинга
SenderEndPoint
Позиции
Методы equals и hashcode
Взаимосвязь между equals и hashCode
Выводы
Самостоятельная работа
В завершение
Глава 7. Расширение Twootr
Задача
Цель
Резюме
Живучесть и шаблон «Репозиторий»
Проектирование репозиториев
Объекты-запросы
Функциональное программирование
Лямбда-выражения
Ссылки на методы
Execute Around
Потоки
map()
forEach()
filter()
reduce()
Optional
Пользовательский интерфейс
Инверсия зависимости и внедрение зависимости
Пакеты и сборочные системы
Ограничения и упрощения
Выводы
Самостоятельная работа
В завершение
Глава 8. Заключение
Проектно-ориентированная структура
Самостоятельная работа
Сознательная практика
Следующие шаги и дополнительные ресурсы
Об авторах
В завершение
Предметный указатель
Этот гид позволит вам прокачать свои навыки объектно-ориентированного программирования и ознакомиться с его приемами на примере реальных проектов. Авторы представляют проектно-ориентированный подход к созданию программного обеспечения на Java, используя который можно стать эффективным разработчиком.
Каждая глава книги сконцентрирована на определенном проекте, начинающемся как простое консольное приложение и вырастающем в полноценное приложение.
Если вы знаете основы программирования на Java, то здесь вы изучите современные методы разработки программного обеспечения, которые позволят создавать актуальные, стабильные и поддерживаемые Java-приложения. Если вы недавно закончили университет или курсы программирования и ищете первую работу в сфере Java, то вам обязательно нужно купить эту книгу - она связывает между собой упражнения в программировании и реальную ежедневную работу профессионального инженера-разработчика.
Предупреждаю сразу: это не книга, которую можно «просто прочитать». Это книга, которую хочется подпортить маркерами, заляпать кофе и оставить на полке с надписью «был тут, прошёл бой».
Если ты ждал сухого учебника с бесконечными примерами FooBar, то выйди из комнаты и закрой дверь. А если ты — тот самый человек, который учится на ошибках, проектах и "ой, а почему это не компилится?" — тебе сюда.
Что внутри?
Вместо того чтобы вдалбливать «SOLID» как мантру, авторы просто садят тебя за стол и говорят: "Давай сделаем анализатор банковских транзакций. С нуля. И не наделаем говнокода."
И ты вместе с ними рефакторишь свой же код, разбиваешь его на классы, внедряешь интерфейсы, пишешь тесты и в какой-то момент понимаешь:
Что не так?
Что по-настоящему круто?
Итог?
Это не книга — это ментор в PDF.
Она не даст тебе знания "как стать сеньором за 21 день".
Но покажет, как думать, как разрабатывать, как тестировать — и как не стать тем самым разработчиком, которого боятся код-ревью.
Если ты готов не читать, а проходить — бери.
Если хочешь "просто Java подучить" — лучше возьми котика и YouTube.
P.S.
После главы про исключения я переписал свой старый проект и убрал 12 try-catch (Exception e).
Я не стану лучше человеком, но стану чуть меньше ненавидеть себя за legacy.
☕️ Оценка: 9 из 10 кружек кофе, пролитых на ноут, пока ты разбираешься, почему тест не проходит.