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-moduleei pea veebiliidesest midagi teadmaweb-modulekasutabapi-modulefunktsionaalsuststudent-moduleon 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.