Рефакторинг - IShop

Категория: Java Enterprise Edition
- 10 уроков
- Длительность: 6:25:51
- Исходный код
- Обзор результата
- UI макеты
- 3332 просмотра
Описание курса
Данный курс предназначен для изучение принципов и правил работы популярных в Java мире фреймворков таких как Spring, Spring Data, JPA. На примере работающего проекта в ходе 10 занятий будут рассмотрены типовые проблемы с которыми сталкивается профессиональный Java разработчик при создании проектов. Будут рассмотрены возможности Java Reflection и каким образом используя данные возможности программист может создать универсальный код, который может быть повторно использован в любом проекте. Таким образом данный курс направлен на создание универсального алгоритма, которым разработчик может пользоваться при создании других проектов.
В рамках курса будут рассмотрены принципы работы ORM фреймворков (объектно-реляционного отображения), фреймворков по внедрению зависимостей (IoC, Dependency Injection), декларативное управление соединениями и транзакциями на базе АОП (аспектно ориентированного подхода), а также шаблон проектирования Repository (DAO) на примере создания фреймворка devstudy.
Обязательным условием успешного прохождения данного курса должно быть успешно пройденный курс Web приложение - IShop, так как данный курс рассматривает проблемы, с которыми столкнется Java разработчик при изменении или расширении web приложения IShop, а также при написании нового web приложения. Очень сложно понять преимущества какого-либо подхода к решению проблемы, не поняв суть проблемы, поэтому рекомендуется сначала написать web проект, а потом его рефакторить!
Создание простого фреймворка devstudy позволит упрощенно показать каким же образом работают такие монстры как Spring, Spring Data, JPA, Hibernate. После создания самописного фреймворка devstudy, который решает указанные проблемы, на последнем занятии будут приведены общедоступные аналоги фреймворков для решения тех же проблем: Spring, Spring Data, JPA, которые затем будут добавлены в проект вместо фреймворка devstudy, чтобы продемонстрировать пример их использования на текущем проекте.
Для детального изучения Spring, Spring Data, JPA рекомендуем курс Web приложение - My Resume.
Для получения дополнительной информации по теме данного курса, рекомендуем следующие источники информации:
В рамках данного курса Вы научитесь
- Отделять бизнес логику от логики хранения данных;
- Использовать возможности Java Reflection для объектно-реляционного отображения;
- Создавать динамические репозитории с помощью механизма Proxy;
- Декларативно управлять соединения и транзакциями. Познакомитесь с основами АОП;
- Создавать отдельные сервисы и управлять зависимостями между ними;
- Использовать принципы SOLID на практике.
Для успешного прохождения курса необходимо
План курса
-
1Добавление загрузки аватарок пользователя и отправка email
Длительность урока: 32:51
Добавление нового функционала:
- При регистрации нового пользователя Ishop должен загрузить аватарку с Facebook и в
дальнейшем отображать ее в верхнем колонтитуле страницы
- Изменение моделей
- Получение ссылки на аватарку
- Изменение сервиса регистрации
- Отображение аватарки пользователя
- После успешного формирования заказа Ishop должен выслать email с ссылкой на заказ
- Email архитектура
- SMTP сервера
- Библиотека commons-email
- Параметры и код отправки email
- При регистрации нового пользователя Ishop должен загрузить аватарку с Facebook и в
дальнейшем отображать ее в верхнем колонтитуле страницы
-
2Обзор возможностей Java Reflection
Длительность урока: 35:25
- Определение Java Reflection
- Программирование без Reflection
- Доступ к полям класса
- Создание объекта класса по имени
- Создание объекта через конструктор
- Вызов метода по имени
- Анализ структуры класса
- Аннотации
- Использование аннотаций
- Объект динамического класса
- Создание прокси-объекта
-
3Универсальный обработчик результата SQL запроса
Длительность урока: 47:46
- Необходимость создания ResultSetHandler для каждого класса сущности
- Принцип объектно-реляционного отображения
- Получение коллекции всех полей класса
- Извлечение мета информации из JDBC ResultSet
- Аннотации отображения
- Конвертер классов
- Класс универсального обработчика результата SQL запроса (DefaultResultSetHandler)
- Классы обработчиков коллекций и единичных объектов
- Класс обработчика запроса количества записей в таблице
- Демонстрация работы обработчика
-
4Декларативное управление соединениями и транзакциями в Java
Длительность урока: 34:05
- Необходимость вручную управлять соединениями к базе данных при выполнении любого запроса
- Использование ThreadLocal переменных для передачи соединения между методами классов
- Правила обработки аннотации @Transactional
- Создание прокси фабрики
- Создание обработчика аннотации @Transactional
- Создание обертки вокруг методов бизнес сервиса с помощью динамических прокси классов
- Демонстрация работы проксирующих объектов
-
5Шаблон проектирования Repository (DAO)
Длительность урока: 30:06
- Проблема смешивания бизнес логики и логики доступа к источнику данных
- Шаблон Repository (DAO) как решение данной проблемы
- Использование репозиториев в проекте и демонстрация сквозной функциональности управления соединениями с помощью АОП подхода
- Преимущества и недостатки шаблона Repository (DAO)
- Пример подключения отдельного источника данных на примере XML файла для отображения категорий
- Демонстрация удобства изменения источника данных при использовании шаблона Repository (DAO)
-
6Динамические репозитории
Длительность урока: 43:29
- Проблема необходимости создания реализации репозитория для каждой сущности проекта
- Идея динамических репозиториев
- Аннотации, необходимые для реализации идеи
- Создание фабрики динамических репозиториев
- Обработчик SELECT запросов
- Обработчик INSERT запросов
- Использование в проекте динамических репозиториев
- Демонстрация работы динамических репозиториев
-
7Менеджер внедрения зависимостей
Длительность урока: 30:48
- Определение внедрения зависимостей
- Проблема внедрения зависимостей через конструктор
- Идея контейнера и компонентов
- Функции контейнера по внедрению зависимостей
- Аннотации для конфигурации зависимостей
- Автоматическое создание объектов всех компонентов
- Автоматическое создание динамических репозиториев
- Автоматическое внедрение зависимостей по типу интерфейса
- Автоматическое внедрения свойств из properties файла
- Использование DependencyInjectionManager в проекте
- Демонстрация работы внедрения зависимостей
-
8Дополнительные сервисы
Длительность урока: 37:59
- Сервис по обработки аватарок с Facebook
- Сервис по сериализации/десериализации корзины покупок в cookie
- Сервис уведомлений
- Сервис асинхронной отправки email о созданном заказе
- Методы контейнера по внедрению зависимостей очищающие внешние ресурсы Java приложения
- Добавление кода отправки уведомления после успешного выполнения текущей транзакции
- Окончательные изменения кода по формированию заказа
- Демонстрация работы асинхронной отправки и выполнения кода после успешного выполнения текущей транзакции
-
9Сравнение и финальный обзор изменений. Принципы SOLID
Длительность урока: 55:48
- Сравнение изменений сделанных в проекте "Web приложение - IShop"
- Универсальный обработчик результата SQL запроса
- Автоматическое формирование INSERT запросов
- Автоматическое управление соединениями и транзакциями
- Разделение логики на логику бизнес сервиса и логику работы с источником данных
- Внедрение зависимостей и свойств из properties файла
- Принципы SOLID на
примере Web приложения IShop
- Принцип единственной ответственности
- Принцип открытости/закрытости
- Принцип подстановки Барбары Лисков
- Принцип разделения интерфейса
- Принцип инверсии зависимостей
- Демонстрация расширяемости и не расширяемости кода
- Жертва производительности в угоду быстрой разработки и легкой расширяемости
- Рекомендации по использованию фреймворков в проекте
- Сравнение изменений сделанных в проекте "Web приложение - IShop"
-
10Использование Spring, Spring Data, JPA в проекте
Длительность урока: 37:34
- Spring IoC вместо менеджера зависимостей
- Spring AOP Transactional вместо фабрики транзакционных сервисов
- JPA(Hibernate) вместо объектно реляционного отображения
- Spring Data вместо динамических репозиториев
- Конфигурационные бины Spring вместо ServiceManager
- Spring JavaMailSender вместо библиотеки common-email
- Для детального изучения Spring, Spring Data, JPA рекомендуем курс Web приложение - My Resume