Горький вкус Java: Библиотека программиста


Б. Тейт

Содержание
Предисловие Хейса Маккормика III

Предисловие автора

Благодарности

О книге
Структура книги
От издательства

Часть I

Глава 1. Грустные истории об анти-паттернах
Свободное падение на языке Java
Анти-паттерны в жизни
Паттерны: изучение положительного опыта
Анти-паттерны: изучение чужих ошибок
Некоторые распространенные анти-паттерны
Анти-паттерны на практике
Идеи анти-паттернов не новы
Примеры из других областей
Детективная работа
Переработка решения и устранение анти-паттернов
Зачем была написана эта книга?
Подход, использованный в книге
Инструментарий, использованный в книге
Структура книги
Взгляд в будущее
Глава 2. Общая ситуация
Благодатная почва для анти-паттернов
Преимущества многоуровневых структур
Недостатки многоуровневых структур
Технологии Интернета
Влияние топологии Интернета на приложения
Безопасность в сетях организаций
Базовые стандарты Интернета и дополнительные уровни
Низкоуровневые коммуникации на базе TCP и IP
HTTP: транспортный протокол уровня приложения
HTML и XML
Мелкий анти-паттерн: Избыток объектов на веб-странице
Объектные технологии и анти-паттерны
Инкапсуляция
Наследование
Полиморфизм
Мелкие анти-паттерны: Избыточные уровни
Приход Java
Технологии Java и борьба с анти-паттернами
Каскадный метод
Итеративные методы
Мелкие анти-паттерны: Неполное преобразование процесса
Экстремальное программирование
Итоги
Анти-паттерны этой главы
Избыток объектов на веб-странице
Избыточные уровни
Неполное преобразование процесса
Часть II

Глава 3. Сервлеты
Ошибки на старте
Исторический анти-паттерн: Волшебная кнопка
Паттерн "Модель-представление-контроллер"
Отсутствие разделения модели и представления
Выделение модели
Анти-паттерн: Волшебный сервлет
Может ли сервлет использоваться в качестве модели?
Ловушка "Волшебного сервлета"
Причины появления "Волшебного сервлета"
Решение: переработка с применением команд
Выделение модели
Инкапсуляция модели в объектах команд
Выделение модельной логики
Отделение возврата
Использование JSP при возврате
Итоги
Анти-паттерны этой главы
Волшебный сервлет
Глава 4. JSP
На середине пути
Признаки опасности
Анти-паттерн: Монолитная страница JSP
Отделение модели от представления
Решение: переработка в архитектуру "Модель-представление-контроллер"
Анти-паттерн: Составная страница JSP
Нужно ли объединять страницы JSP?
Пример с объединением двух интерфейсов
Решение: разбиение JSP
Принятие решений в контроллере
Мелкие анти-паттерны: Слишком крупные и мелкие команды
Чрезмерная группировка команд
Решение: переработка с правильной гранулярностью
Рекомендации по выбору гранулярности
Мелкий анти-паттерн: Жирная команда
Анти-паттерны JSP
Анти-паттерны этой главы
Монолитная страница JSP
Составная страница JSP
Крупные и мелкие команды
Жирные команды
Глава 5. Кэширование
Даешь кэширование!
Анти-паттерн: Отсутствие кэша
Плохой вариант: BBS без кэширования
Модель, представление и контроллер в треугольнике ShowBoard
Модель, представление и контроллер для вывода обсуждения
Модель, представление и контроллер для добавления нового сообщения
Проблемы производительности
Решение: кэширование
Решение 1. Аппаратный кэш
Решение 2. Кэширование команд
Реализация кэша в примере с форумом
Возможные усовершенствования кэша команд
Мелкие анти-паттерны, связанные с кэшированием
Параллельный доступ к статическому кэшу
Разрастание кэша
Анти-паттерн: Монопольная синхронизация чтения/записи
Снижение производительности вследствие конфликтов между операциями чтения
Правильная организация совместного доступа с использованием блокировок чтения/записи
Решение проблем с кэшированием
Анти-паттерны этой главы
Отсутствие кэша
Монопольная синхронизация чтения/записи
Глава 6. Управление памятью
Утечка памяти и анти-паттерны
Управление памятью
Уборка мусора
Подсчет ссылок
Достижимость объектов
Переход с C++ на Java
Возникновение утечки памяти в Java
Поиск утечек памяти в Java
Анти-паттерн: Неиспользуемый слушатель
Опасные привычки
Решение 1. Явное удаление слушателей
Решение 2. Сокращение жизненного цикла якорного объекта
Решение 3. Ослабление ссылки
Ссылочные объекты упрощают управление памятью
Анти-паттерн: Утечка в коллекциях
Проблемы с кэшами и сеансовыми данными
Решение 1. Поиск стандартных признаков
Решение 2. Жесткое сопоставление парных операций
Решение 3. Использование мягких ссылок при кэшировании
Решение 4. Использование коллекций со слабыми ссылками
Решение 5. Использование finally
Борьба с утечкой памяти
Выявление утечки памяти
Принятие решения об исправлении
Изоляция проблемы
Определение причины и исправление ошибки
Страховка от будущего повторения утечки памяти
Мелкие анти-паттерны: Стадо поросят
Коллекции
Иерархия наследования
Итоги
Анти-паттерны этой главы
Неиспользуемый слушатель
Утечка в коллекциях
Глава 7. Подключения и привязка
Создание подключений
Анти-паттерн: Суета с подключениями
Создание и закрытие подключения при каждом обращении
Решение: пул подключений
Переработка интернет-форума для поддержки пулов подключений
Использование метода getPooledConnection
Архитектура коннекторов J2EE
Анти-паттерн: Разделенное закрытие
Проявления анти-паттерна при обработке исключений
Решение: закрытие подключения в блоке finally
Анти-паттерн: Жесткое подключение
Коммуникационный буфер
Преждевременное связывание
Решение 1. Разделение с использованием сообщений XML
Решение 2. Отложенное связывание с использованием веб-служб
Мелкие анти-паттерны при использовании XML
Золотой молоток
Сложности с переходами
Мелкие анти-паттерны: Негибкий XML
Конфликты имен
Негибкие конструкции
Контейнеры с переменным содержимым
Контроль версии
Итоги
Анти-паттерны этой главы
Суета с подключениями
Разделенное закрытие
Жесткое подключение
Неправильное использование XML
Негибкий XML
Глава 8. EJB
Краткий обзор Enterprise JavaBeans
Распределенная архитектура на базе компонентов
Разновидности EJB
Интернет-форум на базе EJB
Структура приложения EJB
Построение удаленного интерфейса
Создание домашнего интерфейса
Реализация класса компонента
Класс компонента Board
Определение первичного ключа
Создание дескриптора применения
Использование модели
Анти-паттерн: Лишние обращения
Оценка затрат в распределенной модели
Интерфейс с избытком коммуникационных циклов
Решение: группировка циклов в фасаде
Корни анти-паттерна
Переработка интернет-форума с применением фасада
Анти-паттерн: Квадратная пробка для круглой дыры
Мелкий анти-паттерн: Объединение данных под управлением компонента
Решение: объединение под управлением компонента
Мелкий анти-паттерн: Применение компонентов с данными при решении простых задач
Мелкий анти-паттерн: Компоненты с данными, используемые только для чтения
Мелкий анти-паттерн: Компоненты с данными, используемые только для записи
Многостраничные списки
Общее решение: правильный выбор типа компонента для конкретной задачи
Мелкий анти-паттерн: Бездумное применение EJB
EJB и кэширование
Реализация кэширования в фасаде
Итоги
Анти-паттерны этой главы
Лишние обращения
Квадратная пробка для круглой дыры
Бездумное применение EJB
Часть III

Глава 9. Культура программирования
Зачем изучать культуру программирования?
Экстремальное программирование требует высокой культуры
Стандарты оформления кода как средство борьбы с анти-паттернами
Мелкие анти-паттерны: Нечитаемый код
Выбор имен
Стандарты выбора имен
Фигурные скобки и отступы
Комментарии
Табуляция и пробелы
Редакторы
Мелкие анти-паттерны: организация и видимость
Мелкие анти-паттерны: структура программы
Основные принципы объектно-ориентированного программирования
Низкоуровневые архитектурные факторы
Исключения
Мелкие анти-паттерны: утечки ресурсов и производительность
Правила тестирования
Написание хорошего руководства по стилю
Купить, позаимствовать, украсть?
Короткое руководство по стилю программирования от Contextual, Inc
Сводка стандартов оформления кода
Глава 10. Масштабируемость
Топологии, обеспечивающие хорошую производительность
Группировка однородного оборудования
Другие варианты топологии
Анти-паттерн: Запоздалая забота о производительности
Разработка без планирования производительности
Примеры из практики
Решение: планирование производительности
Анти-паттерн: Лишние обращения
Решение: кэш и фасад
Анти-паттерн: Плохое управление нагрузкой
Решение: управление нагрузкой
Полноценная балансировка нагрузки
Анти-паттерн: Хаотическое управление сеансовыми данными
Решение 1. Диспетчеризация с учетом сеансовой привязки
Решение 2. Использование распределенных средств управления состоянием
Решения на базе сеансовых компонентов
Решения на базе компонентов с данными
Анти-паттерн: Бестолковая оптимизация
Решение: использование правильной методики оптимизации
Итоги
Анти-паттерны этой главы
Запоздалая забота о производительности
Лишние обращения
Плохое управление нагрузкой
Хаотическое управление сеансовыми данными
Бестолковая оптимизация
Глава 11. Прощальные размышления
Анти-паттерны на разных уровнях
Карьерные перспективы
Понимание анти-паттернов улучшает программы
Понимание анти-паттернов улучшает программистов
Интеграция борьбы с анти-паттернами
Следующий шаг, последний шаг…
Алфавитный указатель

закрыть