32
Apache ISIS Сергій Белей

IT Rally - ISIS

Embed Size (px)

Citation preview

Page 1: IT Rally - ISIS

Apache ISISСергій Белей

Page 2: IT Rally - ISIS

Про себе

• Живу 31 рік

• Програмую 15 років

• Програмую за гроші 6-8 років (точно не памятаю)

• Програмую за гроші повний робочий день на java 4 роки

• Цікавився військовою технікою та походами в гори

• Одружений, маю трьох дітей та собаку

Page 3: IT Rally - ISIS

Що ви почуєте на цій доповіді

В 4ох епізодах ви взнаєте про:

• Що таке DDD і навіщо воно

• Як я вибрав Spring Roo (на що запізно звернув увагу)

• Основний недолік ISIS

• Процес розробки з ISIS (створення проекту і налаштування середовища)

• Як додати кнопку і до чого було DDD на початку

• Те чого дуже мало на інших ресурсах по ISIS

Page 4: IT Rally - ISIS

Що таке DDD і навіщо воноЕпізод 1

Page 5: IT Rally - ISIS

Звичайна програмка виглядає отак

Page 6: IT Rally - ISIS

Деколи це все ділять на шари (layers)

Page 7: IT Rally - ISIS

Де треба зробити зміни при додаванні поля в бізнес об’єкт

Page 8: IT Rally - ISIS

А для бізнесу потрібно тільки це

Page 9: IT Rally - ISIS

І ще бажано не забувати про

• уніфікований UX

Page 10: IT Rally - ISIS

Spring Roo і всі всі всіЕпізод 2

Page 11: IT Rally - ISIS

Погуглимо яка є інформація

З перших п’яти посилань

• Є офіційний сайт

• Є приклади

• Можна знайти прикольне кенгурятко

• І статтю на вікіпедії

Page 12: IT Rally - ISIS

Процес розробки виглядає так:

В консолі roo вводимо команди і все генерується

• project --topLevelPackage org.crc83.activity

• jpa setup --provider HIBERNATE --database POSTGRES

• entity jpa --class ~.domain.Activity --testAutomatically

• field string --fieldName workPermit --notNull

• field string --fieldName convName --notNull

• field date --type java.util.Date --fieldName startDate --notNull

• field date --type java.util.Date --fieldName endDate --notNull

• field number --type int --fieldName operatorId --notNull

• field string --fieldName phoneNumber --notNull

• field string --fieldName customerFullName --notNull

• field string --fieldName sellerFullName --notNull

• hint web mvc

• web mvc setup

• web mvc all --package ~.web

Page 13: IT Rally - ISIS

Результат

• Ми зробили багато роботи і отримали багато коду

• для одного бізнес об’єкта !!!!

Page 14: IT Rally - ISIS

Чому відмовився

• Щоб внести зміни треба вивчити нову мову (команди консолі roo)

• Або робити зміни в багатьох файлах при додаванні одного поля

• Локалізація українською (бо програмка писалась для українця)

• Робота з датами (можливо проблема вирішується, але в мене не було досить часу на це)

Закон технології Лермана. Будь-яку технічну проблему можна вирішити, маючи достатньо часу і грошей.

Наслідок Лермана. Вам завжди буде не вистачати або часу, або грошей.

Page 15: IT Rally - ISIS

ISISЕпізод 3

Page 16: IT Rally - ISIS

Погуглимо яка є інформація

З перших п’яти посилань

• Стаття в вікіпеді

• Країна де є бородаті мужики з автоматами

• Фото бородатих мужиків з автоматами

• Офіційний сайт фреймворка

• Ще одна країна де живуть бородаті мужики з автоматами

Page 17: IT Rally - ISIS

Просто додай apache

Насправді інформації більш ніж досить:

• Офіційний сайт з купою прикладів і відео фрагментів

• Проекти на GitHub

• Відео на Youtube (наприклад оце з минулого JEEConfhttps://www.youtube.com/watch?v=BNGUqZ6YE-M )

Page 18: IT Rally - ISIS

Створення проекту

mvn archetype:generate \-D archetypeGroupId=org.apache.isis.archetype \-D archetypeArtifactId=simpleapp-archetype \-D archetypeVersion=1.8.0 \-D groupId=com.mycompany \-D artifactId=myapp \-D version=1.0-SNAPSHOT \-B

Page 19: IT Rally - ISIS

І ви отримаєте проект з двома класами

• Один відповідає бізнес об’єкту

• А другий містить опис операцій з цими об’єктами

Page 20: IT Rally - ISIS

Настройка Eclipse

• Встановити плагін DataNucleushttp://www.datanucleus.org/products/datanucleus/jdo/guides/eclipse.html

• Додати шаблони (editor templates) http://isis.apache.org/intro/resources/editor-templates.html

• Для того щоб легше було редагувати локалізацію: http://marketplace.eclipse.org/content/gted-gettext-editor

Page 21: IT Rally - ISIS

Процес розробки коротко

• До бізнес обєкта (i.e. SimpleObject) ви додаєте приватні поля, генеруєте сетери і гетери

• Анотуєте гетери щоб задати назву поля на UI, правила валідації, місце поля в таблиці і на формі редагування

Page 22: IT Rally - ISIS

Ви отримаєте

• Веб аплікацію

• Рест сервіс

• Онлайн демо можна подивитись тут http://mmyco.co.uk:8180/isis-onlinedemo/

Page 23: IT Rally - ISIS

Веб аплікація (що і де)

• Для визначення операцій з певним типом бізнес об’єктів використовується репозитарій (для SimpleObject це SimpleObjectsі я б радив переіменівати його в SimpleRepository щоб не плутатись)

Page 24: IT Rally - ISIS

Веб аплікація (що і де)

• Ось операція з одним параметром name

Page 25: IT Rally - ISIS

Веб аплікація (що і де)

• Ось операція з багатьма параметрами

Page 26: IT Rally - ISIS

По розробці фіч це все

• По розробці фіч є багато інформації

• Можна використовувати як покроковий посібник відео про яке я писав раніше https://www.youtube.com/watch?v=BNGUqZ6YE-M

Page 27: IT Rally - ISIS

Говори українськоюЕпізод 4 - останній

Page 28: IT Rally - ISIS

Дозволяємо локалізацію

• Копіюємо translations.po в translations-uk.po

• Розкоментовуємо рядочок в в isis.properties

Page 29: IT Rally - ISIS

Локалізуємо поля на формах в SimpleRepository• Наприклад для поля startDate

додаємо в translations-uk.po такі рядки

#: domainapp.dom.modules.activity.ActivityRepository#create(java.lang.String,java.lang.String,java.lang.String,java.util.Date,java.util.Date,int,java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,int,java.lang.String,int)

msgid "startDate"

msgstr "Дата початку"

• Недолік в тому що якщо сигнатура методу міняється то слід міняти це і в файлах перекладу

Page 30: IT Rally - ISIS

Локалізуємо поля на формах для перегляду SimpleObject

• Наприклад для поля startDate додаємо в translations-uk.po такі рядки#: domainapp.dom.modules.activity.ActivityObject#startDate

#: domainapp.dom.modules.activity.ActivityRepository#create(java.lang.String,java.lang.String,java.lang.String,java.util.Date,java.util.Date,int,java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,int,java.lang.String,int)

msgid "startDate"

msgstr "Дата початку"

Page 31: IT Rally - ISIS

Вирішуємо проблеми з датами

• Мені треба щоб день місяць і рік вводився через DatePicker тільки цифрами і в певному форматі

• І щоб дата зберігалась без часу (лише дата) заміняємо DateTimeна org.joda.time.LocalDate;

Page 32: IT Rally - ISIS

Кінець

• Питання ?

• Зауваження ?

• Пропозиції ?