Java Best Practice. Лучшие практики разработки на Java

Содержание

Слайд 2

Обзор курса Инструменты автоматизированной сборки проектов (Ant, Maven) Обзор технологии Unit-тестирования

Обзор курса

Инструменты автоматизированной сборки проектов (Ant, Maven)
Обзор технологии Unit-тестирования

(Junit)
Технологии логирования (Log4J, Slf4J, LogBack)
Создание «заглушек» (Mockito)
Введение в Spring
MVC Паттерн (Spring MVC)
Слайд 3

Обзор курса. Продолжение Обзор тeхнологии ORM Создание DAO-объекта (JDBC, MyBatis) Механизмы

Обзор курса. Продолжение

Обзор тeхнологии ORM
Создание DAO-объекта (JDBC, MyBatis)
Механизмы

безопасности (Spring Security)
Создание веб-сервисов SOAP и REST (Apache CXF)
Мониторонг (JMX)
Слайд 4

Слайд 5

Apache Ant Apache Ant (англ. ant — муравей и акроним —

Apache Ant

Apache Ant (англ. ant — муравей и акроним — «Another Neat Tool») – утилита

для автоматической сборки проекта
Императивная сборка проекта
Платформонезависимость (Использует JRE)
Управление процессом сборки на основе сценария, записанного в файле build.xml
Слайд 6

Слайд 7

Слайд 8

Apache Maven Инструмент для автоматизации сборки проектов: компиляции, создания jar, создания

Apache Maven

Инструмент для автоматизации сборки проектов: компиляции, создания jar, создания

дистрибутива программы, генерации документации
Обеспечивает декларативную сборку. Информация о проекте описывается на языке POM(Project Object Model) и содержится в файле pom.xml
Maven придерживается принципа «соглашения прежде конфигурации»
Слайд 9

Ключевые преимущества Автоматическое управление зависимостями Огромный, поддерживаемый в актуальном состоянии репозиторий

Ключевые преимущества

Автоматическое управление зависимостями
Огромный, поддерживаемый в актуальном состоянии репозиторий

артефактов
Maven – наиболее широко распространенный инструмент для сборки
Поддержка большинством современных IDE (Eclipse, IntelliJ IDEA …)
Слайд 10

Установка Требуется наличие на машине JDK версии >= 1.5 Дистрибутив можно

Установка

Требуется наличие на машине JDK версии >= 1.5
Дистрибутив можно

скачать с сайта http://maven.apache.org
Прописать переменную окружения M2_HOME
Добавить путь %M2_HOME%/bin в PATH
Для запуска используется команда mvn
Слайд 11

Проверка установки

Проверка установки

Слайд 12

Создание тестового проекта mvn archetype:generate Choose a number or apply filter

Создание тестового проекта

mvn archetype:generate

Choose a number or apply filter (format:

[groupId:]artifactId, case sensitive contains): 254:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
Define value for property 'groupId': : com.peterservice
Define value for property 'artifactId': : mavenTest2
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  com.peterservice: :
Confirm properties configuration:
groupId: com.peterservice
artifactId: mavenTest2
version: 1.0-SNAPSHOT
package: com.peterservice
Y: : Y
Слайд 13

Схема

Схема

Слайд 14

Артефакт Что такое Артефакт? Да все что угодно, например (jar,war, и.т.п.)

Артефакт

Что такое Артефакт? Да все что угодно, например (jar,war, и.т.п.)

Результатом работы Maven является создание (построение) артефакта, а так же ряд дополнительных действий над ним (тестирование, инсталляция в локальный репозиторий, deployment)
Сам артефакт зависит от других артефактов (нашихи внешних, плагинов maven)
Слайд 15

Координаты артефакта groupId artifactId [packaging] default jar Version в формате mmm.nnn.bbb-ssssss-dd

Координаты артефакта

groupId
artifactId
[packaging] default jar
Version в формате mmm.nnn.bbb-ssssss-dd , необязательными являются поля

ssssss (спецификатор SNAPSHOT,RELEASE и т.п.) и dd (номер сборки)
[classifier]
groupId:artifactId[:packaging]:version[:classifier]
Слайд 16

Примеры maven координат log4j log4j log4j 1.2.16 spring org.springframework spring-core 3.1.0.RELEASE

Примеры maven координат

log4j
log4j
log4j
1.2.16
spring
org.springframework
spring-core
3.1.0.RELEASE

Слайд 17

POM файл POM - Project Object Model, xml файл, обычно называется

POM файл

POM - Project Object Model, xml файл, обычно называется

pom.xml
POM файл содержит описание нашего проекта (декларативный стиль!) и все специфические его настройки.
Слайд 18

Декларативный стиль в POM Основная концепция maven в том, что мы

Декларативный стиль в POM

Основная концепция maven в том, что мы

используем лучшие практики разработки (best practices) с зафиксированными правилами и настройками по умолчанию. Maven использует наследование, агрегирование и управление зависимостями при описании проекта в POM файле.
Пример стандартного размещения файлов java проекта:

Build директория по умолчанию - target

Слайд 19

Репозитории Репозиторий maven это файловое хранилище с метаинформацией и быстрым поиском

Репозитории

Репозиторий maven это файловое хранилище с метаинформацией и быстрым поиском и

доступом
local ( находятся в ~/.m2/repository )
remote (например, стандартный http://repo1.maven.org/maven2 или внутренний репозиторий компании, например, Nexus)
используются для хранения и получения зависимостей (dependencies) проекта и плагинов maven
Слайд 20

Жизненный цикл

Жизненный цикл

Слайд 21

Выполнение фаз жизненного цикла mvn [ имя фазы ] При выполнении

Выполнение фаз жизненного цикла

mvn [ имя фазы ]
При выполнении

определенной фазы автоматически выполняются все предыдущие фазы
mvn test (выполняется в папке, где находится pom.xml)
validate -> compile -> test
сообщения об ошибках в папке target\surefire-reports\
Слайд 22

Junit dependency

Junit dependency

Слайд 23

Слайд 24

Обзор технологии Unit-тестирования

Обзор технологии Unit-тестирования

Слайд 25

Что такое Unit-тесты Unit-тест – код, написанный разработчиком, который проверяет небольшой кусок функциональности тестируемого кода.

Что такое Unit-тесты

Unit-тест – код, написанный разработчиком, который проверяет небольшой кусок

функциональности тестируемого кода.
Слайд 26

Слайд 27

Paying-as-you-go vs. Having a Single Testing Phase

Paying-as-you-go vs. Having a Single Testing Phase

Слайд 28

Библиотека Junit (Версия 4) Тестовый класс может иметь любое название. Частая

Библиотека Junit (Версия 4)

Тестовый класс может иметь любое название. Частая

практика заканчивать имя класса на Test (CalculatorTest)
В Junit 4 не нужно наследовать от TestCase
Тестовый метод должен быть помечен аннотацией @Test и может иметь произвольное имя
Хорошей практикой считается называть методы, начиная с test (testAdd)
Слайд 29

Слайд 30

Аннотации JUnit @BeforeClass/@AfterClass (метод должен быть public и static): Метод помеченный

Аннотации JUnit

@BeforeClass/@AfterClass (метод должен быть public и static): Метод помеченный

такой аннотацией выполняется один раз перед выполнением всех тестовых методов
@Before/@After  (метод должен быть public): Метод помеченный такой аннотацией выполняется до/после каждого тестового метода
@Test (expected = RuntimeException.class): Аннотация говорит о том, что в тесте ожидается exception типа Runtime, если в тесте exception не будет выброшен, то тест будет провален
@Test (timeout = 100): Тест будет провален, если он будет выполняться боллее 100 миллисекунд
@Ignore (value = "Ignore"): пропустить тест (не выполнять его)
Слайд 31

Слайд 32

Слайд 33

Подключение библиотеки логирования

Подключение библиотеки логирования

Слайд 34

Уровни логирования The six logging levels used by Log are (in

Уровни логирования

The six logging levels used by Log are (in order):
trace (the least

serious)
debug
info
warn
error
fatal (the most serious)
Слайд 35

Слайд 36

Настройки Конфигурация logback находится в файлах: logback-test.xml logback.xml Если найти данные

Настройки

Конфигурация logback находится в файлах:
logback-test.xml 
logback.xml
Если найти

данные файлы не удается, то используется настройка по-умолчанию (вывод информации в консоль)
Слайд 37

Использование логирования

Использование логирования

Слайд 38

Пример конфигурации

Пример конфигурации

Слайд 39

Слайд 40

Слайд 41

Слайд 42

Слайд 43

Принципы Spring Framework Dependency Injection Aspect-Oriented programming

Принципы Spring Framework

Dependency Injection
Aspect-Oriented programming