Java с человеческим
лицом
Филипп Дельгядо
Мифы о Java
Сплошной Enterprise
Сложносочиненные фреймворки
Программирование на XML-конфигах
Дорогие программисты
Мифы о Java
Ну, если честно, это не мифы
Мифы о Java
Ну, если честно, это не мифы
Но бывает и по другому...
Задача
Нестандартная предметная область
Разнообразный и сложный UI
Транзакции, надежность, расширяемость
Производительность и масштабируемость
Очевидная архитектура
Rich client
Frontend
Web client
Admin
API client
Backend
SQL
NOSQL
Command
Command
Command
MQ
Что делает frontend
Обработка параметров
Валидация
Подготовка результата
Управление сессиями
Логика отображения
Что делает backend
Бизнес-логика
Транзакции
Асинхронные операции
Организация persistence
Особенности frontend
Параметры могут задаваться:
get-запрос, json
Результатом может быть:
html, json, redirect
Несколько видов авторизации
Несколько стратегий работы с сессией
Итак, нужен каркас
Простой
Никакой магии
Одновременная разработка клиента и сервера
Локальные и удаленные сервисы
Документированное взаимодействие
Мало?
Управление кэшами
Управление транзакциями
в том числе смешанными и с учетом кэшей
l10n, i18n
Удобная работа с БД
И почему Java?
Популярность
Безопасность
Инфраструктура
И почему Java?
Популярность
Безопасность
Инфраструктура
Производительность!
И никакой кластеризации!!!
И почему Java?
Для всех поставленных (и множества
возникших в процессе) задач есть простые и
удобные решения
Почему делаем велосипед?
У всех прочих фреймворков «есть один
фатальный недостаток»
Слишком много конкретных особенностей
Создание собственного проще, нежели
доработка существующего
KISS!
Бизнес-логика и верстка
Разработкой frontend'а должны заниматься
разработчики клиента
Frontend должен быть простой и надежный
Строгое описание взаимодействие
Интерфейс взаимодействия
Описание взаимодействия client - frontend должно:
быть удобным для чтения
поддерживать версионность
быть кодом, а не документом
Хочется поддержки сложных структур, массивов,
хэш-таблиц.
Нужно уметь описывать ошибки и константы
Возможное решение
JSON (а есть варианты?)
Описание объектов — POJO, с стандартным
описанием сериализации через аннотации
Библиотека трансляции — Jackson
Технические подробности от разрабочика
спрятаны
Интерфейс
public static final class Request
{
@JsonProperty public String id;
@JsonProperty public String name;
}
public static final class Response extends JsonResponse
{
public static Response notExists() {
return new Response("notExists"); }
@JsonProperty public String id;
@JsonProperty public Date createdDate;
}
Команда
@Command(path = "/itemEditor/setFields")
public class SetFields implements ICommand<SetFields.Request, SetFields.Response>
{
@Autowired private ItemService itemService;
@Override public Response execute(final Request request, final Context context)
{
if (validate().isId(request.id).notEmpty(request.name).isError())
return Response.illegalParams();
Future<Item> futureItem = serviceExecutor.doLocal(context, ()-> {
return itemService.changenProperties(request.id, request.name, context);
});
return new Response(futureItem.get());
}
Команда
@Command(path = "/itemEditor/setFields")
public class SetFields implements ICommand<SetFields.Request, SetFields.Response>
{
@Autowired private ItemService itemService;
@Override public Response execute(final Request request, final Context context)
{
if (validate().isId(request.id).notEmpty(request.name).isError())
return Response.illegalParams();
Future<Item> futureItem = serviceExecutor.doLocal(context, ()-> {
return itemService.changenProperties(request.id, request.name, context);
});
return new Response(futureItem.get());
}
Простые технологии
Spring Framework
SOLR
Jackson
Velocity
ECache
Servlets
Tomcat
ActiveMQ
Persistence
No ORM
No NoSQL
Blobs/JSON
IBM DB2
Persistance: почему блобы
Легко менять структуру
Легко сделать версионность
Производительность
Просто
Ну и что получилось
2 недели разработки
Разработчики работают параллельно
Серверная часть простая
Производительность
Граничные условия
Хотя бы один приличный java dev
если не senior, то middle с опытом
Наличие нестандартных требований к каркасу
иначе проще взять Spring MVC
Сложное и нагруженное
иначе проще взять Joomla
Вопросы?
dph.public@gmail.com
vk.com/dphil
Goodwix.com

Java c человеческим (и даже богатым) лицом / Филипп Дельгядо