Liigu peamise sisu juurde

Moodulid

Sissejuhatus

Moodul on IntelliJ projektis seseisev üksus. Kui projekt on kogu konteiner, kõik, mis IntelliJ-s on avatud/saadaval, siis moodul on üks sõltumatu osa selle sees.

Igal moodulil on oma lähtekoodi kaust (src), oma paketid ning see kompileeritakse teistest sama projekti moodulitest sõltumatult. Moodulid ei näe üksteise klasse enne, kui nende vahele on lisatud sõltuvus (ehk imporditakse klasse).

Antud kursusel (ITI0202) on iga harjutus eraldi moodul ühes suures kursuse projektis. See hoiab kõik harjutused selgelt eraldatuna, võimaldades samal ajal töötada kõige kallal ühes IntelliJ aknas.

Projekt vs Moodul

Piltlikult saab projekti ja moodulit eristada sedasi:

ITI0202-XXXX  (IntelliJ project - the outer container)
├── EX
├── EX01 (module)
├── EX02 (module)
├── EX03 (module)
└── ...
├── PR
├── PR01 (module)
├── PR02 (module)
├── PR03 (module)
└── ...
└── ...

Reaalne näide suurest tarkvaraprojektist

Oletame, et arendad ülikooli infosüsteemi. Süsteem koosneb mitmest suuremast osast:

  • tudengite haldus
  • õppeainete haldus
  • maksete arvestus
  • aruandlus
  • REST API
  • veebiliides

Kui kogu see kood oleks ühes moodulis, tekiksid probleemid:

  • kogu süsteem kompileeritakse alati korraga
  • kõik klassid on ühes suures „koodihunnikus“
  • sõltuvused muutuvad segaseks
  • ühe osa muutmine võib ootamatult mõjutada teisi osi

Selle asemel saab projekti jagada mooduliteks:

university-system (project)
├── student-module
├── course-module
├── billing-module
├── api-module
└── web-module

Iga moodul:

  • sisaldab oma src kausta
  • omab oma pakette ja klasse
  • kompileeritakse eraldi
  • sõltub teistest moodulitest ainult siis, kui see on teadlikult seadistatud

Näiteks

  • billing-module ei pea veebiliidesest midagi teadma
  • web-module kasutab api-module funktsionaalsust
  • student-module on täiesti iseseisev osa süsteemist

See muudab süsteemi:

  • paremini hallatavaks
  • lihtsamini testitavaks
  • loogiliselt jaotatuks
  • paremini skaleeruvaks

Sama põhimõte kehtib ka kursuse ülesannetes – iga harjutus on nagu väike iseseisev rakendus, mis ei tohi sõltuda eelmistest lahendustest.

Mooduli struktuur

Igal moodulil on src kaust kus asub lähtekood. Selles kaustas organiseeritakse kood pakkidese täpselt nagu paketid ja nimeruum peatükk neid käsitles.

exercise01/
└── src/
└── university/
└── students/
├── Student.java
└── Enrollment.java

Moodulid ja paketid

Moodulid ja paketid on eraldi mõisted, mis toimivad erinevatel tasanditel:

  • Pakett organiseerib klasse mooduli sees
  • Moodul organiseerib funktsionaalsust tervikuna

Kaks erinevat moodulit võivad sisaldada sama nimega pakette ilma konfliktita, sest iga moodul kompileeritakse omaette ulatuses.

exercise01/src/university/students/Student.java   -> package university.students
exercise02/src/university/students/Student.java -> package university.students (no conflict)

Mooduli loomise kohta saate lähemalt lugeda siit.