Содержание
- 2. Smart1: система бронирования ТВ-рекламы Вся реклама на телеканалах 1+1, 2+2, ТЕТ, CITI продается через Smart1 Месячный
- 4. Архитектура CentOS 4.1.2 PostgreSQL 8.4.4 Tomcat 6.0.20 Hibernate 3.3.x Ehcache 2.1.0 Java 1.6 64-Bit server GWT
- 5. Разработка Java 1.6 64-Bit server IntelliJ IDEA 10 GIT Maven 2 Jetbrains TeamCity 6.0.3 Selenium 1.0.2
- 6. Производительность Денормализация структуры БД Тяжелые отчеты обновляются по расписанию Ряд задач выполняется только ночью HP Proliant
- 7. Строки кода
- 8. От Java к Groovy Smart1 - наш второй groovy проект До перехода сомнения: что такого принципиального
- 9. Опрос: Насколько Groovy эффективнее Java? 4-6 раз, коллеги Я бы сказал 2-3 раза, Алекс Ткачман Я
- 10. Groovy - это гораздо больше, чем убрать из Java ; и типы! значительно меньше кода код
- 11. Коротко и выразительно! Взять все проходящие размещения и отсортировать сначала по цене, потом по дате создания
- 12. List bookedPlacements = new ArrayList(); for (Placement placement : placements) { if (placement.isBooked()) { bookedPlacements.add(placement); }
- 13. Коротко и выразительно! Вернуть короткие названия бюджетных месяцев def monthNames = budgets*.month*.shortName List monthNames = new
- 14. Коротко и выразительно! Эфирное время конца программы – это время начала первого из послепрограмных блоков, либо
- 15. List afterBlocks = new ArrayList (); for (Block block : blocks) { if (block.getPosition() == AFTER)
- 16. Коротко и выразительно! Если плательщик задан, то вернуть его, иначе взять плательщика из прошлого периода. Если
- 17. if (payee != null) { return payee; } if (getPrevInYear() != null && getPrevInYear().getPayee() != null)
- 18. Немного сложнее? Взять размещения из самой популярной категории placements.groupBy { it.category }.collect {it} .sort {it.value.size()}.last().value
- 19. Java, с использованием «библиотечных» groupBy и last: List groupsList = new ArrayList((Util.groupBy(placements, new GroupSelector () {
- 20. Java, прямая реализация: Map > categoryPlacements = new HashMap >(); for (Placement placement : placements) {
- 21. Сила Closure Настоящие возможности открываются, когда мы понимаем что такое Closure sort, findAll, groupBy и т.п
- 22. Сила Closure Получить Map время, на название (названия уникальны для времени) placements.mapUnique(‘time’) { it.name } Map
- 23. Расширение существующих классов Мы можем добавлять методы и поля к уже написанным классам без наследования. Наш
- 24. Расширение существующих классов Методы у Object дают нам следующий синтаксис: transaction { new User(‘New User’).dbStore() }
- 25. Расширение существующих классов Сделаем немного удобнее Hibernate Criteria API: def clientGroups = RobotGroup.dbQuery.with { eq('deleted', false)
- 26. DSL делается легко count = 0 new SwingBuilder().edt { frame(title: 'Frame', size: [300, 300], show: true)
- 27. JFrame frame = new JFrame("Frame"); frame.setSize(300, 300); frame.setLayout(new BorderLayout()); final JLabel label = new JLabel("Click the
- 28. DSL делается легко shopList(client, 2011, 'Test ShopList', primePercent: 70) { discount(offPrime: -10.disc) channelSl(channel, lowDiscount: -30.disc) {
- 29. Selenium junit тест void testPlace_SpotClient() { runTest( agent, { chooseCampaigns 'XC' placeClick getBlock(1), 'XC' waitForError 'No
- 30. Динамика Динамическое программирование позволяет нам понять что такое повторное использование по настоящему! Например давайте перестанем каждый
- 31. Bidirectional Association class Program { @OneToMany (mappedBy = "_program") Set _blocks = [] } class Block
- 32. Bidirectional Association И теперь мы сразу можем работать: def p = new Program() def b =
- 33. Bidirectional Association Этого писать не нужно: class Program { ... void addBlock(Block b) { b._program =
- 34. Lazy initialization Этого писать не нужно: class MonthBudget { ... Centi __actualBudget() { ... calculation }
- 35. Но не все так хорошо Скорость? IDE?
- 36. Реально тормоз! Groovy работает в 10 раз медленнее Java
- 37. Benchmark Groovy, Grovy++, Java https://github.com/alextkachman/fib-benchmark
- 38. Но на этом можно работать Groovy работает также как Python, Ruby, PHP и т.п.
- 39. Benchmark Java, Python, Ruby http://shootout.alioth.debian.org/
- 40. Скорость Groovy не забываем, что часто узкое место база данных любой фрагмент можно переписать на java
- 41. Groovy++ Статически типизированное расширение Groovy По скорости выполнения почти не уступает Java Может рассматриваться как альтернатива
- 42. IDEA IDEA в целом очень хорошо поддерживает groovy: Для работы с динамическими методами и полями в
- 44. Скачать презентацию