Wiki for common java theme.
1. Code Convention
Рассмотрим предназначение и использование Code Convention на примере Java.
1.1. Зачем нужно Соглашения по оформлению кода
Соглашения по оформлению кода важны для программистов по ряду причин:
-
80% от стоимости программного обеспечения приходится на его обслуживание
-
программное обеспечение не всегда поддерживается инженером, который его разработал
-
исходный код программ становится более удобочитаемым, позволяя инженерам более быстро и тщательно понимать код
На данный момент существует большое количество custom code convention, но обычно в их основе лежит одна из приведенных ниже:
Для повседневного использования рекомендуется использовать Google Java Style, потому что она развивается совместно с Java, в отличии от Code Conventions for the Java™ Programming Language, которая последний раз изменялась 20 апреля 1999.
Едиственное что стоит изменить, это:
-
разрешенная ширина строки кода:
100
→120
-
отступы: 4 whitespaces → 1 tab
1.2. Основные выдержки
1.2.1. WHITESPACE
Пустая строка используется между:
-
членами класса
-
методами
-
логическими секциями в методе
Пробел используется:
-
между
keyword
и скобкой -
после запятой
-
вокруг бинарных операторов
-
выражения в цикле
for
1.2.2. LINE FEED
Перенос строки используется:
-
после точки с запятой (исключение оператор
for
) -
после запятой
-
перед операцией
1.3. Examples
1.3.1. Форматирование троичного оператора
Bad:
alpha=aLongBooleanExpression?beta:gamma;
Well:
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
1.3.2. Объявление переменных
Bad:
int foo, fooarray[];
int level; //indentation level
int size; //size of table
Object currentEntry; //table entry
Well:
int foo;
int[] fooarray;
int level; // indentation level
int size; // size of table
Object currentEntry; // table entry
1.3.3. if
, if … else
, if … else if
Bad:
if(condition)
{
statements;
}
if(condition){
statements;
}
else
{
statements;
}
if(condition){
statements;
}else if(condition){
statements;
}else{
statements;
}
Well:
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
1.3.4. while
, do … while
, for
, foreach
Bad:
for(initialization;condition;update)
{
statements;
}
for(initialization;condition;update);
for(initialization:list){
statements;
}
while(condition)
{
statements;
}
while(condition);
do{
statements;
}while(condition);
Well:
for (initialization; condition; update) {
statements;
}
for (initialization; condition; update);
for (initialization : list) {
statements;
}
while (condition) {
statements;
}
while(condition);
do {
statements;
} while (condition);
1.3.5. switch
Bad:
switch(n){
case 1:
statements1;
/* falls through */
case 2:
statements2;
break;
case 3:
statements2;
break;
default:
statements;
break;
}
Well:
switch (n) {
case 1:
statements1;
break;
case 2:
case 3:
statements2;
break;
default:
statements;
}
2. JavaEE vs Spring Framework
2.1. Архитектура Java Enterprise Edition (JavaEE)
Java Enterprise Edition Architecture - это спецификация архитектуры программного обеспечения для корпоративного использования. Поэтому фокус идет на следующие функции:
-
Веб-приложения
-
Безопасность транзакций
-
Администрирование пользователей и данных
-
Высокая доступность
-
Безопасность ресурсов
-
Коррупционной безопасности
-
Масштабируемость
-
Четко определенные интерфейсы
-
Модульные компоненты
Эта функциональность повышает запрос функциональных и нефункциональных требований обязательных для предприятий. Ранее улучшения в Java Enterprise Edition рассматривались в рамках JCP (Java Community Process) и приводят к JSR (Java Specification Request), которые публикуются совместно с эталонной реализацией. Сейчас
Для приложений JavaEE требуется совместимый сервер приложений (Appliacation Server), который должен предоставлять все контейнеры и службы JavaEE спецификации. Обязательными контейнерами могут быть Web-контейнер, содержащий среду выполнения для Servlet и JSP, и EJB-контейнер, содержащий среду выполнения для Enterprise JavaBeans. Эти серверы приложений предоставляют следующие функциональные возможности:
-
Безопасность
-
Управление транзакциями
-
ORM сервисы
-
Службы имен и каталогов (JNDI)
-
Связь между компонентами
-
Внедрение зависимостей (CDI)
-
Поддержка развертывания
Поскольку приложения, как правило, следуют архитектурным шаблонам, приложения JavaEE разрабатываются в соответствии с 3-уровневой архитектурой приложений:
-
Клиентский уровень. Содержит внешние элементы, использующие Java-компоненты (JSP, JSF) или фреймворки других языков программирования, например AngularJS. Этот уровень подключается к бизнес-уровню с использованием JSP (Java Server Pages), технологии JSF (Java Server Faces), Web-service и Servlet.
-
Бизнес-уровень. Содержит бизнес-логику, которая реализована в EJB (Enterprise Java Beans). Соединяется с уровнем данных с использованием JPA (Java Persistence API), JMS (Java Message Service) и JTA (Java Transaction API) или Java-фреймворков, таких как Hibernate,
-
Уровень данных. Хранит данные. Хранилища данных могут быть in-memory, SQL, NoSQL и многих других форматах (XML, JSON, постоянные POJO и т.д.).
Межуровневые компоненты включают в себя JTA (Java Transaction API) для управления транзакциями, JNDI (Java Naming and Directory Interface) и CDI (Contexts and Dependency Injection).
2.2. Spring архитектура
Spring - это Java Framework с открытым исходным кодом. Spring сам по себе является базовым фреймворком или полным набором компонентов фреймворков на основе контекста. В большинстве случаев экосистема Spring выглядит следующим образом:
Spring был представлен версией 1.0 в 2003 году для решения ненужных сложностей в архитектурах JavaEE. В качестве альтернативы для JavaEE Spring 2.0 выиграл премию JAX Innovation Award как легковесную систему, которая приносит новшества в экосистему Java. Spring - это модель, основанная на POJO (Plain Old Java Object), которая активно использует интерфейсы и внедрение зависимостей (DI - Dependency Injection). В его рамках, ресурсы, контролируемые с помощью Spring, называются Spring Beans. Spring модули используют модульность, чтобы уменьшить зависимости между модулями. Наиболее известные модули:
-
Spring DAO. используется для JDBC баз данных и управления транзакциями.
-
Spring ORM. интегрирует популярные фреймворки для объектно-реляционных отображений (ORM - Object Relation Mapping), например Hibernate.
-
Spring Web. реализует базовую функциональность веб-приложений.
-
Spring Web MVC. расширяет Spring Web возможностями архитектуры MVC Model-View-Controller и поддерживает REST-Webservices.