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

Updated slides

parent 7fb7c152
......@@ -8,59 +8,64 @@
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2020 - {LECTURE_NO}
IT1901 Fall 2021 - {LECTURE_NO}
== Overview
- Group deliverable 2
- Group deliverable 2 (GD2)
- 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 mellom (og til andre, relevante moduler)
** bygging styres (fortsatt) av maven og hver modul har hensiktmessig konfigurasjon
* kodingsprosjektet skal deles opp i egnede moduler med avhengigheter
* 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]
== Group deliverable 2 (cont.)
== GD2 - arkitektur
- arkitektur (full tre-lags arkitektur)
** kjernelogikken og ui-et skal skilles fra hverandre (domenelaget + brukergrensesnittlaget )
** persistens med JSON og Jackson evt. alternativt bibliotek (persistenslaget)
*** definere filformat for brukerdata og evt. innstillinger
*** reflektere over og velge mellom dokumentmetafor (desktop) og implisitt lagring (app)
** alle tre lagene spiller sammen
* kjernelogikken (domenelaget) og ui (brukergrensesnittlaget) skal skilles fra hverandre
* persistens med JSON vha. egnet bibliotek, f.eks. Jackson
** definere/dokumentere (?) filformat for brukerdata og evt. innstillinger
* reflektere over og velge mellom dokumentmetafor (desktop) og implisitt lagring (app)
* alle tre lagene spiller sammen
== Group deliverable 2 (cont.)
== GD2 - kodekvalitet
- kodekvalitet
** tester skal skrives for all modulene
** testdekningsgrad (Jacoco) og (annen) kodekvalitet skal sjekkes av egne tillegg ( for eksempel Checkstyle og Spotbugs som plugins)
** rimelig god testdekning av alle lagene
* tester skal skrives for alle modulene
* testdekningsgrad og (annen) kodekvalitet skal sjekkes av egne maven-tillegg (f.eks. **jacoco**, **checkstyle** og **spotbugs**)
* rimelig god testdekning av alle lagene
== Group deliverable 2 (cont.)
- dokumentasjon
** dokumentasjon (readme filer og kommentarer) må oppdateres
** dokumentere arkitektur med minst et diagram (bruk PlantUML) i tillegg til teksten i readme
== GD2 - dokumentasjon
[.smaller-80]
== Group deliverable 2 (cont.)
- arbeidsvaner
** 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
* generell dokumentasjon må holdes oppdatert
* arkitektur med minst et diagram (bruk PlantUML) i tillegg til teksten i readme
* valg knyttet til arbeidsvaner, arbeidsflyt, testing, bruk av verktøy for sjekking av kodekvalitet (f.eks. innstillinger)
[.smaller-80]
== Group deliverable 2 (cont.)
- leverer på gitlab
** prosjektet må være gitpod-klart, så vi kan åpne det i gitpod fra en merkelapp i repoet
** maven skal brukes til kjøring av applikasjonen, testene og av kodekvalitet sjekker
** kode for vurdering må leveres i mastergreina av standard repo for gruppen (https://gitlab.stud.idi.ntnu.no/it1901/groups-2020/gr20nn/gr20nn)
- På Blackboard leverer dere en enkel tekst som nevner at repo-et er klart for vurdering.
- Hvis dere leverer etter fristen, informerer du lærerassistenten.
== GD2 - arbeidsvaner
* kodingsoppgaver skal være utgangspunktet for alt arbeid
* greiner (branch) samler arbeid for hver kodingsoppgave (?)
** se alternativet **trunk based development**
* bruk milepæl (milestones) knyttet til innleveringen
* dere jobber i par og bytter på å kode
* "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
......@@ -73,14 +78,13 @@ system will be structured and function.
- 3-tier applications
- REST
== layers vs tiers
== layers vs. tiers
- sometimes the terms are used interchangeably
- there is a difference
** layers - logical separation
** tiers - physical separation
[background-color = "#124990"]
[color = "#fff6d5"]
== monolithic applications
......@@ -88,7 +92,7 @@ system will be structured and function.
== monolithic applications (1)
- All the functionality is packed in a single software unit
** presentation
** ui
** logic
** data
- designed without modularity
......@@ -160,8 +164,30 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
[background-color = "#124990"]
[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
- 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
......@@ -170,7 +196,6 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
- 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`
== Modular projects with Maven (2)
- reduce complexity and size of individual build files
......@@ -178,6 +203,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
== Parent pom example
[.smaller-40]
```xml
<?xml version="1.0" encoding="UTF-8" ?>
......@@ -223,6 +249,7 @@ image::../images/lecture12/rtodo.png[canvas, size=contain]
== Descendant pom example
[.smaller-40]
```xml
<?xml version="1.0" encoding="UTF-8" ?>
......@@ -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[]
\ 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