ОГЛАВЛЕНИЕ
Предисловие
Почему мы написали эту книгу
Подход, ориентированный на разработчика
Что в этой книге?
Для кого эта книга?
Условные обозначения, используемые в книге
Использование примеров кода
Глава 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, то вам обязательно нужно купить эту книгу - она связывает между собой упражнения в программировании и реальную ежедневную работу профессионального инженера-разработчика.