Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,561 views

Published on

  • Be the first to comment

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

  1. 1. Java с человеческимлицомФилипп Дельгядо
  2. 2. Мифы о JavaСплошной EnterpriseСложносочиненные фреймворкиПрограммирование на XML-конфигахДорогие программисты
  3. 3. Мифы о JavaНу, если честно, это не мифы
  4. 4. Мифы о JavaНу, если честно, это не мифыНо бывает и по другому...
  5. 5. ЗадачаНестандартная предметная областьРазнообразный и сложный UIТранзакции, надежность, расширяемостьПроизводительность и масштабируемость
  6. 6. Очевидная архитектураRich clientFrontendWeb clientAdminAPI clientBackendSQLNOSQLCommandCommandCommandMQ
  7. 7. Что делает frontendОбработка параметровВалидацияПодготовка результатаУправление сессиямиЛогика отображения
  8. 8. Что делает backendБизнес-логикаТранзакцииАсинхронные операцииОрганизация persistence
  9. 9. Особенности frontendПараметры могут задаваться:get-запрос, jsonРезультатом может быть:html, json, redirectНесколько видов авторизацииНесколько стратегий работы с сессией
  10. 10. Итак, нужен каркасПростойНикакой магииОдновременная разработка клиента и сервераЛокальные и удаленные сервисыДокументированное взаимодействие
  11. 11. Мало?Управление кэшамиУправление транзакциямив том числе смешанными и с учетом кэшейl10n, i18nУдобная работа с БД
  12. 12. И почему Java?ПопулярностьБезопасностьИнфраструктура
  13. 13. И почему Java?ПопулярностьБезопасностьИнфраструктураПроизводительность!И никакой кластеризации!!!
  14. 14. И почему Java?Для всех поставленных (и множествавозникших в процессе) задач есть простые иудобные решения
  15. 15. Почему делаем велосипед?У всех прочих фреймворков «есть одинфатальный недостаток»Слишком много конкретных особенностейСоздание собственного проще, нежелидоработка существующего
  16. 16. KISS!
  17. 17. Бизнес-логика и версткаРазработкой frontendа должны заниматьсяразработчики клиентаFrontend должен быть простой и надежныйСтрогое описание взаимодействие
  18. 18. Интерфейс взаимодействияОписание взаимодействия client - frontend должно:быть удобным для чтенияподдерживать версионностьбыть кодом, а не документомХочется поддержки сложных структур, массивов,хэш-таблиц.Нужно уметь описывать ошибки и константы
  19. 19. Возможное решениеJSON (а есть варианты?)Описание объектов — POJO, с стандартнымописанием сериализации через аннотацииБиблиотека трансляции — JacksonТехнические подробности от разрабочикаспрятаны
  20. 20. Интерфейс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;}
  21. 21. Команда@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());}
  22. 22. Команда@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());}
  23. 23. Простые технологииSpring FrameworkSOLRJacksonVelocityECacheServletsTomcatActiveMQ
  24. 24. PersistenceNo ORMNo NoSQLBlobs/JSONIBM DB2
  25. 25. Persistance: почему блобыЛегко менять структуруЛегко сделать версионностьПроизводительностьПросто
  26. 26. Ну и что получилось2 недели разработкиРазработчики работают параллельноСерверная часть простаяПроизводительность
  27. 27. Граничные условияХотя бы один приличный java devесли не senior, то middle с опытомНаличие нестандартных требований к каркасуиначе проще взять Spring MVCСложное и нагруженноеиначе проще взять Joomla
  28. 28. Вопросы?dph.public@gmail.comvk.com/dphilGoodwix.com

×