Turns domain knowledge into code

g9 Konsepter

Domenekunnskap er viktig for å forstå og vedlikeholde en applikasjon. En domenemodell er et nyttig redskap enten man velger en smidig eller mer tradisjonell utviklingsmodell. Gjennom hele applikasjonens livssyklus oppdateres modellen, og ofte vil dette også medføre kodeendringer.

En domenemodell beskrives ofte som en modell som inneholder informasjon om oppførsel og data. Modellen viser hvilke objekter (entiteter) som inngår i en applikasjon og sammenhenger mellom disse. g9 baserer seg på en modelldrevet tilnærming til programvareutvikling.

g9models

Viktige begreper og modeller i g9 er:

  • Domenemodell - klassemodell beskrevet i Java, UML eller EMF/Xcore. Modellen synkroniseres inn i g9 og beskriver objekter som inngår i applikasjonen og sammenhenger mellom disse
  • Databasemodell - de delene av klassemodellen som beskriver databaselaget (persisteringslaget)
  • Objektseleksjon - En delmengde av klassemodellen. Et utvalg av objekter og assosiasjoner/roller som representerer en brukerhistorie/use-case/oppgave og som for eksempel danner grunnlag for et brukergrensesnitt (dialog), en rapport e.l.
  • Ressurser og Dialogmal - Elementer som farger, fonter og bilder og standarder for design av brukergrensesnitt (dialoger)
  • Dialogmodell - Brukergrensesnitt basert på en objektseleksjon og en dialogmal

Les mer om:

 

g9 Modeller

Domenemodell i Enterprise Architect

Enterprise Architect er et omfattende UML analyse- og design verktøy fra Sparx systems. En UML-profil til bruk i EA definerer g9-spesifikke elementer. Modellen importeres til et g9 prosjekt og er grunnlag for generering av applikasjonen under utvikling.

Les mer om modellering i EA: http://www.sparxsystems.com/

Domenemodell i EMF Ecore/Xcore

Eclipse Modeling Framework er et åpent kildekodeprosjekt i regi av Eclipse. Det er et rammeverk for å lage verktøy og applikasjoner basert på en strukturert datamodell. Ecore-formatet er en delmengde av UML klassediagrammet og beskriver objekter, attributter, sammenhenger, operasjoner og begrensninger som gjelder for dette formatet. Modellfilen (*.ecore) kan importeres til et g9-prosjekt og er grunnlag for generering av applikasjonen under utvikling.

Et hvilket som helst verktøy som produserer en modellfil i et standard Ecore-format kan brukes sammen med g9. Det er en fordel å benytte et verktøy hvor man enkelt kan vedlikeholde Ecore-modellen. I Eclipse kan Xcore brukes til å vedlikeholde Ecore-modeller (i en tekstlig representasjon). Xcore er en utvidelse av Ecore-syntaksen.

Les mer om:

Domenemodell i Java

Mange beskriver domenemodellen direkte i Java. g9 kan lese dine klassedefinisjoner og etablere disse som domenemodellen og bruke den for videre modellering og kodegenerering. Javaklassene kan annoteres med JPA og g9 annotasjoner.

Databasemodell

En databasemodell brukes til å definere informasjon som er spesifikk for en database målplattform, f.eks. Oracle eller MySQL. Databasemodellen er basert på persistenslaget som er definert i domenemodellen. Modellen kan brukes til å lage databaseschema og OR-mapping. OR-mapping er nyttig hvis man ønsker å generere CRUD-tjenester. Merk at det er fullt mulig å ta utgangspunkt i en eksisterende databasemodell. Databasemodellen vises i en trestruktur i g9.

Objektseleksjon

Informasjonsmodellen som er grunnlaget for en dialog (skjermbilde), CRUD-tjenester eller webservice kalles en objektseleksjon. Modellen er en delmengde av klassemodellen. Vanligvis er det en objektseleksjon per dialog i en applikasjonen. Objektseleksjonen benyttes både i modellering og som grunnlag for kodegenerering.

Dialogmal og Dialogmodell

En dialogmal inngår i en samling av egenskaper (ressurser) som brukes i design og generering av dialoger.

En dialogmodell beskriver brukergrensesnittkomponenter som er koblet til en objektseleksjons rolleattributter.

Dialogeditoren viser dialogen i en trestruktur og som et GUI. Dialogen kan endres i trestrukturen eller i GUI.

 

g9 Kodegenerering

Generering av applikasjon

I g9 er det kodegeneratorer som lager Javakode for ulike deler av en applikasjon. Domenegenerator lager Java domeneklasser og eventuelle webspesifikke filer, servicegenerator lager kode for f.eks. CRUD-tjenester, dialoggenerator lager klientkode (f.eks. React, JSF/ICEfaces eller Swing), og databasegenerator lager schema scripts og data-aksess laget som bruker Hibernate til å aksessere databasen.

Implementering av forretningslogikk gjøres i Hooks. Hooks blir aldri overskrevet ved generering/regenerering av kode.

 

Generatorer

Alle innebyggede generatorer er nærmere beskrevet i generator oversikt.

Dialoggenerator

Dialoggeneratoren lager klientdelen(e) av applikasjonen. Generatoren benytter dialogmodellene med tilhørende objektseleksjoner i generering av Javakode.

Domenegenerator

Domenegeneratoren lager Javakode for blant annet Javaklasser, interfaces og enumeratorer. Domenegeneratoren kan konfigureres og den genererte koden kan skreddersys. Skreddersøm blir ikke overskrevet ved regenerering.

Webservice-generator

benyttes i tjenesteutvikling til å generere

  • SOAP/Castor marshalling
  • WS Client
  • WSDL
  • XSD

Objektseleksjon

Objektseleksjonsgeneratoren benyttes til å lage tjenestelaget (Services) i applikasjonen. Dette inkluderer kode for CRUD tjenester.

  • CRUD tjenester brukt i dialoger
  • SOAP meldinger brukt i Web services

Databasegenerator

Databasegeneratoren inkluderer generering av Hibernate-mapping som mapper domenemodellen til database schema, og eventuelt generering av schema for databaser som støttes i g9 (Derby, MySQL, Oracle, SQL Server og Sybase).

Skreddersy dine egne generatorer

g9 har støtte for utvikling av skreddersydde generatorer. Generatorer kan skrives i Xtend eller i Java. Xtend er en Java dialekt som er tilpasset template programmering og håndtering av tekststrenger. Xtend oversettes til Java kode, men har flere forbedringer sammenliknet med standard Java. Xtend Eclipse plugin gjør det enkelt å programmere i Xtend og den er sømløst integrert med Java.

g9 run-time modul er fri programvare og koden kan tilpasses etter behov.

Les mer om Xtend på http://www.eclipse.org/xtend/

 

g9 Arkitektur

g9 genererer en flerlagsapplikasjon med følgende komponenter:

  • Klient: Swing, React, ICEfaces eller en egenskrevet målplattform
  • Objektseleksjon: CRUD (Create, Read,Update, Delete) tjenestelag som benytter POJOs (Plain old Java objects) eller Java EE stateless session beans
  • ORM (Object-Relational Mapping) mapping og persistering ved hjelp av Hibernate
  • Domenemodell
  • Databaselagring (Oracle, Sybase, MS SQL, MySql mm.)
  • Eventuell støtte for Web service eller JMS
  • Eventuell utskrift av data ved hjelp av Jasper Report eller til eksport til regneark

g9 runtime arkitektur

g9 klientarkitektur har følgende run-time komponenter:

client-arch

  • Domenemodell (Domain model): Javaklasser generert fra g9 eller modelleringsverktøyet
  • Brukergrensesnitt (View og Controller): generert Javakode som håndterer opptegning av brukergrensesnitt
  • Hendelser (Actions): generert Javakode som håndterer oppførsel i brukergrensesnittet. Denne koden er limet mellom klient og tjenersiden
  • Egenskrevet kode (Hooks): her kan man overstyre generert kode og legge til egen kode. NB! Røres ikke ved regenerering
  • Proxy (Service proxy og Spring) lag mot serverside CRUD tjenester. Default benyttes Spring

g9 serverside arkitektur

server-arch

  • Domenemodell (Domain model): Javaklasser generert fra g9 eller modelleringsverktøyet
  • Grensesnitt mot klientside (Service interface). Velg mellom en POJO implementering (som kjører i samme JVM som klienten), eller EJB, dvs. J2EE stateless beans (tilstandsløs bønne). Spring-konfigurering gjør det enkelt å skifte mellom POJO og EJB
  • Generert kode som håndterer CRUD actions serverside (Service)
  • Egenskrevet kode (Hooks): kode som overstyrer generert kode, eller kode hvor man legger til ny forretningslogikk
  • Persistenslag (Persistence): sørger for at implementeringssdetaljer i persistering skjules for CRUD og Hooks. Implementering av persistens (Hibernate)
  • Hibernate (Object-Relational) mapping, generert kode som gjør at Hibernate transporterer (flytter) data mellom databasen og Java domeneobjektene
  • Databaseskjema (DB) generert fra g9.

 

g9 Lisens

g9 runtime

g9

For å kunne oppdatere til nyere versjoner av g9 må det finnes en gyldig lisens.

g9 lisensinformasjon finnes i Eclipse > Preferences > g9 > License. Dialogen viser type lisens som er installert og hvordan man kan bestille en lisens.

Ta kontakt med oss på adm@esito.no, hvis du trenger en ny eller en utvidelse av lisens.