Commit 21487880 authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Updated slides

parent 7fb7c152
...@@ -8,59 +8,64 @@ ...@@ -8,59 +8,64 @@
include::{includedir}header.adoc[] include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph] [.smaller-80][.center-paragraph]
IT1901 Fall 2020 - {LECTURE_NO} IT1901 Fall 2021 - {LECTURE_NO}
== Overview == Overview
- Group deliverable 2 - Group deliverable 2 (GD2)
- Architectural styles - Architectural styles
- Modular projects with Maven - Modular projects with Maven and Java
== Group deliverable 2 == GD2 - modularisering
- modularisering * kodingsprosjektet skal deles opp i egnede moduler med avhengigheter
** kodingsprosjektet skal deles opp i egnede moduler med avhengigheter mellom (og til andre, relevante moduler) * bygging styres (fortsatt) av maven og hver modul har hensiktmessig konfigurasjon
** bygging styres (fortsatt) av maven og hver modul har hensiktmessig konfigurasjon * maven-moduler er et krav, mens Java-moduler er ikke (men i utgangspunktet anbefalt)
* mer om modularisering senere
[.smaller-80] [.smaller-80]
== Group deliverable 2 (cont.) == GD2 - arkitektur
- arkitektur (full tre-lags arkitektur) * kjernelogikken (domenelaget) og ui (brukergrensesnittlaget) skal skilles fra hverandre
** kjernelogikken og ui-et skal skilles fra hverandre (domenelaget + brukergrensesnittlaget ) * persistens med JSON vha. egnet bibliotek, f.eks. Jackson
** persistens med JSON og Jackson evt. alternativt bibliotek (persistenslaget) ** definere/dokumentere (?) filformat for brukerdata og evt. innstillinger
*** definere filformat for brukerdata og evt. innstillinger * reflektere over og velge mellom dokumentmetafor (desktop) og implisitt lagring (app)
*** reflektere over og velge mellom dokumentmetafor (desktop) og implisitt lagring (app) * alle tre lagene spiller sammen
** alle tre lagene spiller sammen
== Group deliverable 2 (cont.) == GD2 - kodekvalitet
- kodekvalitet * tester skal skrives for alle modulene
** tester skal skrives for all modulene * testdekningsgrad og (annen) kodekvalitet skal sjekkes av egne maven-tillegg (f.eks. **jacoco**, **checkstyle** og **spotbugs**)
** testdekningsgrad (Jacoco) og (annen) kodekvalitet skal sjekkes av egne tillegg ( for eksempel Checkstyle og Spotbugs som plugins) * rimelig god testdekning av alle lagene
** rimelig god testdekning av alle lagene
== Group deliverable 2 (cont.) == GD2 - dokumentasjon
- dokumentasjon
** dokumentasjon (readme filer og kommentarer) må oppdateres
** dokumentere arkitektur med minst et diagram (bruk PlantUML) i tillegg til teksten i readme
[.smaller-80] * generell dokumentasjon må holdes oppdatert
== Group deliverable 2 (cont.) * arkitektur med minst et diagram (bruk PlantUML) i tillegg til teksten i readme
- arbeidsvaner * valg knyttet til arbeidsvaner, arbeidsflyt, testing, bruk av verktøy for sjekking av kodekvalitet (f.eks. innstillinger)
** kodingsoppgaver skal være utgangspunktet for alt arbeid (Issues for alle ting som skal gjøres)
** greiner (branch) samler arbeid for hver kodingsoppgave
** bruk milepæl (milestones) knyttet til innleveringen
** dere jobber i par og bytter på å kode
[.smaller-80] == GD2 - arbeidsvaner
== Group deliverable 2 (cont.)
- leverer på gitlab * kodingsoppgaver skal være utgangspunktet for alt arbeid
** prosjektet må være gitpod-klart, så vi kan åpne det i gitpod fra en merkelapp i repoet * greiner (branch) samler arbeid for hver kodingsoppgave (?)
** maven skal brukes til kjøring av applikasjonen, testene og av kodekvalitet sjekker ** se alternativet **trunk based development**
** kode for vurdering må leveres i mastergreina av standard repo for gruppen (https://gitlab.stud.idi.ntnu.no/it1901/groups-2020/gr20nn/gr20nn) * bruk milepæl (milestones) knyttet til innleveringen
- På Blackboard leverer dere en enkel tekst som nevner at repo-et er klart for vurdering. * dere jobber i par og bytter på å kode
- Hvis dere leverer etter fristen, informerer du lærerassistenten. * "produktiv" kode og tester må holde tritt
== GD2 - lær (i smidig ånd)
* hva virker bra og ikke så bra
* hva er en god oppdeling i og fordeling av arbeidsoppgaver
* ikke lur dere selv eller andre
[.smaller-80]
== GD2 - leveranse
* prosjektet må være gitpod-klart med Gitpod-knapp i gitlab eller merkelapp i README-fila
* maven skal brukes til kjøring, testing og sjekk av kodekvalitet
* kode må ligge i master-greina av standard kodelager for gruppa
* på Blackboard leveres en enkel tekst om at kodelageret er klart for vurdering
* det er også nå "flytende/anbefalt" frist, så hold kontakt med lærerassistenten om fremdrift
== Architectural styles == Architectural styles
...@@ -73,14 +78,13 @@ system will be structured and function. ...@@ -73,14 +78,13 @@ system will be structured and function.
- 3-tier applications - 3-tier applications
- REST - REST
== layers vs tiers == layers vs. tiers
- sometimes the terms are used interchangeably - sometimes the terms are used interchangeably
- there is a difference - there is a difference
** layers - logical separation ** layers - logical separation
** tiers - physical separation ** tiers - physical separation
[background-color = "#124990"] [background-color = "#124990"]
[color = "#fff6d5"] [color = "#fff6d5"]
== monolithic applications == monolithic applications
...@@ -88,7 +92,7 @@ system will be structured and function. ...@@ -88,7 +92,7 @@ system will be structured and function.
== monolithic applications (1) == monolithic applications (1)
- All the functionality is packed in a single software unit - All the functionality is packed in a single software unit
** presentation ** ui
** logic ** logic
** data ** data
- designed without modularity - designed without modularity
...@@ -160,8 +164,30 @@ image::../images/lecture12/rtodo.png[canvas, size=contain] ...@@ -160,8 +164,30 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
[background-color = "#124990"] [background-color = "#124990"]
[color = "#fff6d5"] [color = "#fff6d5"]
== Modularity
== Modularity
- means for splitting a large problems into parts
** distribute and isolate work
** distribute artifacts for use and reuse
- more or less supported by tools and languages
** maven - modular build
** java - strong encapsulatation
[background-color = "#124990"]
[color = "#fff6d5"]
== Modularity with maven
== Modular projects with Maven == Modular projects with Maven
- main "parent" module with common configuration
- sub-modules with dependencies
** libraries (and plugins) are modules
** own modules follow architecture
- manages build tasks
** sequenced according to dependencies
** execute in appropriate context e.g. classpath
== Modular projects with Maven == Modular projects with Maven
...@@ -170,7 +196,6 @@ image::../images/lecture12/rtodo.png[canvas, size=contain] ...@@ -170,7 +196,6 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
- the descendent `pom` can override inherited configuration elements - the descendent `pom` can override inherited configuration elements
- descendant `pom` inherits most elements with the exception of things like artifactid, name which are used to identify the parent `pom` - descendant `pom` inherits most elements with the exception of things like artifactid, name which are used to identify the parent `pom`
== Modular projects with Maven (2) == Modular projects with Maven (2)
- reduce complexity and size of individual build files - reduce complexity and size of individual build files
...@@ -178,6 +203,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain] ...@@ -178,6 +203,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
== Parent pom example == Parent pom example
[.smaller-40]
```xml ```xml
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
...@@ -223,6 +249,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain] ...@@ -223,6 +249,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
== Descendant pom example == Descendant pom example
[.smaller-40]
```xml ```xml
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
...@@ -256,4 +283,68 @@ image::../images/lecture12/rtodo.png[canvas, size=contain] ...@@ -256,4 +283,68 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
``` ```
[background-color = "#124990"]
[color = "#fff6d5"]
== Modularity with Java
== Java modules
[.smaller-80]
* corresponds to a set of packages
* strong encapsulation
** explicitly export packages
** explicitly state dependencies
** also enforced during runtime
* advantages
** avoid relying on internals
** build lighter apps
* disadvantages...
== core - module-info.java
```java
module todolist.core {
requires transitive com.fasterxml.jackson.databind;
exports todolist.core;
exports todolist.json;
}
```
== core - https://gitlab.stud.idi.ntnu.no/it1901/todo-list/-/blob/master/todolist/core/src/main/java/module-info.java[module-info.java]
* module name
** how to get (guess) name of libraries
* **requires** - what this module needs
** **transitive** - others will need this too
** **exports** - what others may use
== fxui - https://gitlab.stud.idi.ntnu.no/it1901/todo-list/-/blob/master/todolist/fxui/src/main/java/module-info.java[module-info.java]
```java
module todolist.ui {
requires com.fasterxml.jackson.databind;
requires java.net.http;
requires javafx.base;
requires javafx.controls;
requires javafx.fxml;
requires todolist.core;
requires fxutil;
opens todolist.ui to javafx.graphics, javafx.fxml;
}
```
== fxui - module-info.java
* **opens** ... *to* - allow getting runtime info about classes using so-called _reflection_
** fxml
** REST frameworks
** test frameworks
* **--add-opens** command line option
** support unmodularized mode
include::{includedir}footer.adoc[] include::{includedir}footer.adoc[]
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment