Skip to content
Snippets Groups Projects
Commit 21487880 authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Updated slides

parent 7fb7c152
No related branches found
No related tags found
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment