Top Banner
3 SG at CTU 3sg.czacm.org Cerny T., Chalupa V., Rychtecky L., Linhart T. [email protected] www.jformbuilder.org
35

Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Jun 09, 2015

Download

Technology

JFormBuilder
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

3SG at CTU 3sg.czacm.org

Cerny T., Chalupa V., Rychtecky L., Linhart [email protected]

www.jformbuilder.org

Page 2: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Vývoj enterprise aplikací

Struktura aplikace

Problémy s údržbou i tvořením GUI

Závislosti 3 vrstev (coupling)

Opakování informace a replikace rozhodnutí Generátory UI Automatizace skrze inspekci

JFormBuilder (JFB)

Co, kde, kdy, jak a proč

Online tutoriál JFB Za hranice Javy

MDD, XLS, XML, Aneb přátelství analytika a vývojáře Budoucí vize

Page 3: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Běžná aplikace je rozdělena na vrstvy To umožní oddělení zájmů

▪ Prezentace - JSF, Facelets, RichFaces..▪ EJB, (Spring)▪ JPA - entity

Page 4: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Entita určuje persistentní data▪ Ale také určuje co se bude sbírat od uživatele▪ Jak budou data vypadat, či jaká mají omezení

Služby pracují s entitami ▪ Pokud se změní název entity musí se to promítnout i zde

Prezentace dat (entit) v uživatelském rozhraní▪ Formuláře a Tabulky▪ Provázání asosiací

▪ Tabulka – formulář

▪ Navigace a menu▪ Layout▪ Akce

Page 5: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Vrstva prezentace defnuje zobrazení dat uživateli▪ Vizualizace dat

▪ Motivace▪ Údržba Software ≈ 65-75% životního cyklu aplikace▪ Porozumění SW ≈ 40-60% z údržby SW▪ Vývoj uživatelského rozhraní ≈ 50% celkového vývoje

▪ Formuláře a Tabulky▪ Jsou nejvíce svázány s persistentní vrstvou ▪ Jsou koncepčně nejsložitější části UI (omezení a validace)▪ Jak budou tyto vypadat je určeno

Entitou Layoutem Rozhodnutím jaké pole tam má být a jaké ne Uživatelskými právy Volbou widgetu Kontextem (editace, čtení, hledání)

[IEEE-CSAE, Cerny et al., 2011], [ACM-RACS, Cerny et al., 2011]

Page 6: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Entity Class View Form

View Table

Page 7: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Entity Class View Form

View Table

Page 8: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Perzistentní vrstva JPA Entita

▪ Zachycuje omezení každého atributu▪ Povolený typ▪ Informace o očekávaných datech

Hibernate Validation▪ Detailní informace o validních datech pro každý atribut

Byznys vrstva

Prezentace Form

▪ Dekoruje entitu a její atributy▪ Přídává omezení pro validní data

Tabulka▪ Dekoruje entitu a její atributy

Page 9: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

class Osoba { String jmeno; String prijmeni; String email; String pass; Pohlavy pohlavy; String narozen;}

UiWidgety

InputText InputDoubleText InputSecret InputSelect InputCheckBox InputDate

class Firma { Katg kategorie; String misto; String ulice; String mesto; String psc; String tel; Boolean souhlas;}

Facebook

Page 10: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

class Osoba { String jmeno; String prijmeni; String email; String pass; Pohlavy pohlavy; Date narozen;}

UiWidgety

InputText InputDoubleText InputSecret InputSelect InputCheckBox InputDate

class Firma { Katg kategorie; String misto; String ulice; String mesto; String psc; String tel; Boolean souhlas;}

Page 11: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

class Osoba { String jmeno; String prijmeni; String email; String pass; Pohlavy pohlavy; Date narozen;}

UiWidgety

InputText InputDoubleText InputSecret InputSelect InputCheckBox InputDate

class Firma { Katg kategorie; String misto; String ulice; String mesto; String psc; String tel; Boolean souhlas;}

Page 12: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

class Osoba { String jmeno; String prijmeni; String email; String pass; Pohlavy pohlavy; Date narozen;}

UiWidgety

InputText InputDoubleText InputSecret InputSelect InputCheckBox InputDate

class Firma { Katg kategorie; String misto; String ulice; String mesto; String psc; String tel; Boolean souhlas;}

Page 13: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

GMail

Page 14: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

InputText InputDoubleText InputSecret InputSelect InputCheckBox InputDate

Page 15: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

ACM-ICPC

This form is made by JFB

Page 16: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Vývojář opakuje svá rozhodnutí, pro použití UI Widgetů. Používá totožné komponenty, jen je jinak dekoruje. Musí replikovat nastavení již zachycené v entitě.

Náchylnost k chybám Snadno přehlédnutá inkonzistence Nudná práce pro „opice“

Otázka Jak jinak lze vytvořit UI něž manuálně?

Page 17: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Grafcké drag & drop formy Složité přizpůsobení Stále replikace informací na dvou místech, neřeší údržbu Neřeší nekonzistenci informací mezi dat. vrstvou a prezentací

XML Model formy Stále replikace informací na dvou místech (XML a Class), neřeší údržbu Neřeší nekonzistenci informací mezi dat. vrstvou a prezentací

Inspekce zdrojového kódu a následná transformace Machine learning Vizualization

<h:inputText required=„false“

@Column(nullable=false)String getName() { ..

Page 18: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Speciální značky

1. InspektorŠablony

UI Widgetů

2. Meta Model

3. Visualizér

Konfgurace

Mapování

Page 19: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Inspekce entity a následné získání MetaModelu▪ Enitita má speciální značky

▪ JPA, Hibernate Validator, JFormBuilder nebo cokoliv, co si nastavíme v konfguraci▪ Značky lze vytvořit dle požadavků klienta v JFB frameworku▪ Zjištěný MetaModel nezavisí na výstupu

▪ Inspektor sestaví meta model a identifkuje vlastnosti atributů

Inspektor

Meta Model

Speciální značky

Page 20: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Kompatibilita s GUI widgety▪ Konfgurace umožní provázání UI Widgetů se skupinou atributů tříd

▪ String and length > 255 inputTextArea▪ String and email inputEmail

▪ Není nutné mít specifckou skupinu widgetů, ale lze adaptovat cokoliv▪ HTML, RichFaces, JSF, ICEFaces, PrimeFaces, Tomahawk, Trinidad, ADF, XML.. :)

▪ Šablona UI Widgetu odkazuje na konkrétní použití widgetu bez identifkace specifcký hodnot

ŠablonyUI Widgetů

Konfgurace

<h:inputText onblur="validateInputText(this,..);#{onblur}" styleClass="#{inputClass}" rendered="#{empty render$id ? 'true' : render$id}" required=”$notNull" id=”$id" maxlength=”$maxLength" size=”$size" title=”#{text[$entity.$name]}" value=”#{$value}">

Input Text Widget

Mapování

Page 21: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Vizualizér▪ Dle konfgurace spojí inspektovaný atribut třídy a UIWidget▪ Bere v potaz

▪ Vybraný profl▪ Search, Edit, Read

▪ Vybraná práva uživatele▪ Layout

Visualizér

Profl Editace Role s nižším právy

Page 22: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Snadné propagování validace do UI▪ Snazší vyplnění formulářů▪ User friendly – usability ▪ Lze integrovat kontextovou nápovědu▪ Není třeba AJAX - snadná integrace s JS

Page 23: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Layout▪ Jak vysázet vstupní pole do výsledného výstupu (formuláře)▪ One column, two column, custom▪ Šablona

▪ Profl▪ Generujeme fragment zaměřený na hledání, čtení, zápis, nebo něco jiného.

▪ Bezpečnost▪ Statická a nebo lze i Third party / Role based access control (PicketLink, Spring)

Uplný form Zamezení přístupu Jiny profl a jiný layout

Page 24: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní
Page 25: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Snadná změna poskytovatele UI Widgetů i cílové platformy

▪ Centralizace použití widgetu▪ Vše je defnováno jednou a na jednom místě▪ Možná Vám to připomíná Aspektové orientované programování▪ Podpora údržby

▪ => Přenostitelnost▪ Snadná migrace do jiného UI▪ Téměř okamžitý přechod z RichFaces do ICEFaces

▪ Jen změna šablon pro UI Widgety

Page 26: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ On-demand (run-time) generování▪ Generování UI fragmentů na dotaz v produkci▪ Možný contextový security framework jenž aplikuje run-time informace▪ Zamezení běžně používaným kondicionálům v UI fragmentech

▪ Možné zlepšení výkonu načítání fragmentů (měřeno!)

▪ Možné další rozšíření ▪ Specifcké UI pro vybraného uživatele [2011 - IEEE cultural UI] ▪ Uživatel má možnost nastavení svého UI▪ Možné rozlišovat mobilní zařízení a desktopy a ovlivnit výstup

?

?

Page 27: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Údržba UI fragmentů▪ Značná redukce

▪ Na místo psaní formů a tabulek jen defnice UI Widgetů a mapování mezi skupinou atributů

▪ String and length > 255 inputTextArea▪ String and email inputEmail

▪ Studie údržby

Změna Změněných souborů Změna řádků

JFormBuilder/Manuální vývoj

Nový atribut 3 / 12 6 / 126

Nová třída 9 / 7 41 / 121

Změna pořadí prvků 1 / 2 2 / 54

Globální změna - internacionalizace 25 / 29 32 / 213

Page 28: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Quick Tour▪ Václav Chalupa▪ JFormBuilder.org/video

Page 29: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Inspektor nemusí jen inspektovat Javu▪ Lze i XML, UML, XLS nebo cokoliv jiného

▪ Analytik si snadno napíše v Excelu spcifkaci UI a nechá si přes JFB vygenerovat HTML▪ Ihned vidí co vytvořil a to prodiskutuje se zákazníkem

▪ Pošle vývojáři Excel XSL, ten použije jiné šablony a nechá přes JFB vygenerovat RichFaces UI nebo dokonce celý datový model v Javě a klidně i SQL databázi▪ JFB dokáže daný meta model přeložit do jakékoliv textové podoby

▪ Android

▪ Další Frameworky a jazyky

Inspektor

Meta Model

Speciální značky

JavaXLSXML

Page 30: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

▪ Tlustý datový model lze zachytit již na úrovni modelu▪ Model-driven development▪ UML Class model + UML Profly▪ Z modelu lze generovat aplikaci obsahující vazbu na JFB

▪ �

Page 31: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Java XML

View

Page 32: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Vývoj enterprise aplikací Struktura aplikace

▪ (JPA, EJB, JSF, Facelets, RichFaces, ICEFaces, ADT, apod.) Problémy s údržbou i tvořením GUI Závislosti 3 vrstev (coupling) Opakování informace a replikace rozhodnutí

Generátory UI Automatizace skrze inspekci

JFormBuilder (JFB)▪ Kompatibilita s GUI widgety▪ On-demand generation▪ Third party / Role based access control▪ Profly▪ Layouty▪ Možné zrychlení načítání stranek ▪ Udržba = nulová investice▪ Přenositelnost

Online tutoriál JFB Za hranice Javy

MDD, XLS, XML, Aneb přátelství analytika a vývojáře

Page 33: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

Prototypování aplikací

Android

.NET a další platformy

Reverse engineering vysosej metaModel převeď jinam

Page 34: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

FormBuilder: A Novel Approach to Deal with View Development and Maintenance 2011, ČERNÝ T., DONAHOO M. J. In SofSem 2011 Proceedings of Student Research Forum. Bratislava: OKAT, 2011, p. 16-34. ISBN 978-80-88720-17-1.

A Profle Approach to Using UML Models for Rich Form Generation 2010, ČERNÝ T., SONG E. In ICISA 2010 International Conference on Information Science and Applications (ICISA), 2010. New York: IEEE Computer Society Press, 2010, p. 635-342. ISBN 978-1-4244-5941-4.

UML-Based Enhanced Rich Form Generation, 2011, Tomas Cerny and Eunjee Song

ACM RACS 2011 – recently published at http://oslab.ssu.ac.kr/CFP/RACS2011/

Aspektově orientované programování [Kiczales 1997] Model Driven Architecture – OMG.org

Naked Objects MetaWidget

Page 35: Inspekce zdrojového kódu J2EE aplikací s generováním komplexních fragmentů uživatelského rozhraní

? ? ?? ? ?