# Projektek és csomagok ## Projektek Valamilyen szempontból elkülöníthető kódot és adatokat nagyobb csoportba, projektekbe lehet szervezni. Nyílt, szabadabb felépítésű, a projekt jellegzetességeit követi. Dinamikus felépítésű. Kötelező elemei: - manifest fájl: a projekt környezetének leírására és a betöltési paraméterek megadására - speciális projekt osztály: a főbb műveletek és információk leírására ### Manifest Szabványos Json fájl, a főkönyvtárban kell elhelyezni 'manifest.meta.json' néven. Kötelező, általános tartalom: - 'type': a manifest által leírt típus: projekt, erőforrás, csomag (project, resource, package). - 'name': a projekt vagy csomag neve. - 'id': egyedi azonosító - 'version': a csomag vagy projekt verziószáma. - 'requires': a szükséges csomagok vagy szimbólumok listája (függőség). - 'imports': a betöltendő fájlok vagy alkönyvtárak listája. Csomag opciók: - 'generator': a csomagot létrehozó neve. - 'provides': a csomag neve vagy szimbólumok listája. Opcionális tartalom: - 'resources': globális erőforrás definíciók. - 'options': egyedi adatok ### Project osztály Speciális osztály, egy projekt egy példányt tartalmazhat. Elemei: - előre definiált projekt típusokat származtathat, például az ModemaProject csomagból - specifikus erőforrásokat tárolhat: szerzők, licenc, projekt műveletek és célok - mint egy klasszikus osztály tartalmazhat változókat és metódusokat - különböző 'célokat' tartalmazhat, amik erőforrás is metódus párosok. A projekt betöltésekor először a manifest fájl alapján betöltődnek a szükséges elemek, létrejön egy a projekt nevét tartalmazó publikus raktár és környezet kontextus. A futtatókörnyezet eltárolja a példányosított osztállyt és opcionálisan meghívja az onLoad() metódust, amennyiben létezik. Ha adatlekérés céljából jön létre egy példány a projekt osztályból, a konstruktor végrehajtódik, de az onLoad() nem. Emiatt megfelelően kell elosztani az inicializációs hívásokat. Bezáráskor az onClose() és a destruktor kerül végrehajtásra. Az eltérő projekt típusok miatt opcionális az onSave(), végrehajtása környezetfüggő, bezáráskor nem kerül meghívásra (ellentétben az onClose() metódussal). ### Erőforrások A projekt osztály önmaga is egy csoportosítás, az ebben elhelyezett erőforrásoknak ezzel korlátozott lesz a hatóköre. Amennyiben szükséges, a manifest fájl is tartalmazhat bejegyzést osztott erőforrások megadásához. ### Projekt célok Speciális erőforrások és metódusok segítségével projekt célok definiálhatók, fájlok vagy adatbázis elemek létrehozásához. - általános cél (`#TargetResource`): meglévő adatokat dolgozza fel, rendszerint nem függő kimenetet hoz létre. - dinamikus cél (`#DynamicTargetResource`): általában raktárból dolgozik, frissít vagy új adatot hoz létre. - tisztítás (`#CleanTargetResource`): átmeneti adatokat töröl vagy alaphelyzetbe hoz. - tesztelés (`#TestTargetResource`): adatok vagy programkódok helyességét ellenőrzi. - dokumentáció készítés (`#DocResource`): különböző adatokból vagy programkódokból automatikus dokumentációt hoz létre. - egyedi típus szintén használható. Interaktív parancssorból, parancsszkriptből vagy weboldalon lekérdezhetők és végrehajthatók. Használatuk vizualizációhoz és dokumentációhoz is nagyon előnyös. ### Csomagok A projektek létrehozhatnak egy vagy több csomagot, amik osztott adatoknak vagy osztott könyvtárnak felelnek meg. Felépítése a projektekhez hasonló, de tartalmaznak speciális elemeket. Közvetlenül betölthetők raktárakba, 'használatra készek'. Inkább statikus megközelítésűek, verzionálhatóak. Lényegében rendszerfüggő pillanatképekhez hasonlíthatóak. ## Könyvtárfa Az ajánlott könyvtár nevek a következők: - Code/: a projekt osztály bővítése, kiegészítő kódok. - Documentation/: csomag dokumentáció. - Dynamic/: dinamikus tartalom, a csomagkészítő írhat bele. - Library/: megosztott tartalom csomag készítéshez - Tests/: a csomag tesztek és eredmények.