Hej, kryptisk overskrift, jeg ved det ![]()
Grunden til jeg spørger er at projektet vi arbejder på er modent til en lille omstrukturering.
Projektet er, på nuværende tidspunkt, opbygget således:
Et Flex hovedprojekt er bunden/stagen for alt andet, den består hovedsagligt af en ModuleLoader komponent og en tilhørende menu.
Derudover er der lavet 9-10 Flex Moduler i hvert sit projekt med en mxml fil som hovedfil der indeholder en ModuleLoader. dvs. at jeg kan teste mine moduler direkte i sit eget projekt uden at skulle flytte dem til det overordnede projekts source mappe og lade den loade dem ind.
Ok, men når det så bliver tid til at sende en release ud har jeg et script der compiler alle modulerne og flytter de enkelte swf's fra underprojektets bin-debug mappe til hovedprojektets source folder.
Hovedprojektet kan nu startes op, viser menuen og et klik på denne resulterer i at det rette modul bliver loaded. Det virker godt, det er nemt at arbejde med, det er fleksibelt og der er ingen afhængigheder fordi de enkelte moduler lever i deres eget projekt og kan testes og udvikles der inden de flyttes til hovedprojektet.
Men...
Enkelte af de forskellige moduler indeholder store .flv filer og anden tung grafik der loades ind fra en "assets" mappe. Denne assets mappe skal så være identisk i det enkelte projekt og i hovedprojektet så modulerne kan finde dem i "runtime". Ok så dvs. alt ligger 2 gange, en gang i modulets projekt og en gang i hovedprojektet. Det er da ok, grafikken har ikke ændret sig meget osv. osv. problemerne begynder nu at vise sig når jeg "comitter" til svn og når jeg bygger en "release build" så er det pludseligt ikke sjovt at vi har ramt og passeret GB grænsen.
Jeg vil gerne have grafikken ud af min source mappe, grafik for sig og kode for sig. Jeg vil også gerne have min grafik et centralt sted og ikke spredt i både de enkelte projekter og i hovedprojektet, men jeg vil også gerne have alt lige kan chekkes ud og ind fra svn og at jeg kan vælge at compile en release build med hele pivetøjet i engang imellem.
Det er uhensigtsmæssigt at svn skal køre versionering på mine .flv's ved hvert comit og at "clean project" begynder at tage over 3 min.
Så for at koge mit sludder ned: mange projekter skal dele en assets mappe, jeg skal kunne vælge at køre subversion på assets mappe når det er nødvendigt, jeg skal kunne lave en release build uden at lege sherlock holmes og ende op med en 7 GB air fil. Jeg tænker swc, men tror det måske bare vil flytte problemet et led ud. Leder nok mere efter et "columbus æg"/inspiration til en alternativ måde at løse det på.
Ja jeg ved det, i pose og sæk, men hvis nogen kan så er det jer ![]()
2 kommentarer
Hej Rick'
Lyder spændende med omstruktureringen, håber alt går vel.
Jeg synes du skal tage et kig på ResourceBundle frameworket der er i Flex. Det er enormt effektivt, og giver dig mulighed for at lave centrale pakker, dels med indhold og/eller information om hvor indholdet i øvrigt er at finde.
Nu er du peget i en retning, og inden jeg går dybere kan du lige kigge lidt på det selv og eventuelt vende tilbage med pro et kontra, om det er noget vi skal se nærmere på.
Hils på kontoret.
Vi snakkes ved.
MVH
Asger
Hej Asger
Tak for indspark:)
Omstruktureringen er jo et luksusproblem så tager det som et godt tegn at vi er nået dertil!
Jeg tog en tur rundt i resource bundles, jeg har faktisk aldrig haft brug for at lave en "Localization" men
kan se det er flagskibet for resource bundles. Faktisk kan jeg ikke finde eksempler på nogen der laver andet end
det, selv om det er nævnt som en feature i Flex at det kan dække både media og text filer.
Problemet med absolutte og relative urls ser ud til at række over i properties filerne, de ville blive svære at dele:/
Dvs. jeg burde ikke lave en properties fil med en sti ligende "/User/Ricki/Flex/resourceBundle" og comitte den til vores repository.
Du kender jo en del til vores projekt, alle de klienter vi har i systemet skal have den pakke af resources liggende tilrådighed, men
når vi opdaterer dem skal kun ændringerne sendes ud og ikke 5 GB, så at bygge en ny SWC hver gang og sende den ud er heller ikke
hensigtsmæssigt. Systemet kan dog godt håndterer en mappe den kan nedstige i og kontrollere timestamps så kun de relevante ting bliver uploaded, det mister vi ved at bygge en my SWC hver gang der er den mindste ændring.
Ligeledes er det uheldigt hvis alle 5 GB bliver kompilet ned i hvert projekt fordi der er en SWC i projekternes library path.
Så er der mulighed for at lave det runtime shared, men det kunne måske give anledning til at et 5GB library skulle smides
i hukommelsen ligemeget hvilket projekt man startede.
Drømmescenario:
Jeg laver et nyt "Project" fylder det med media filerne og hooker dette projekt op til vores svn repository. Ok så er der styr på versionering af media, men dette projekt bliver ikke berørt af at andre projekter bliver comittet eller compilet.
Når jeg sidder og tester så er mine "src" mapper i de enkelte projekter linket til dette resource projekt så de kan benytte filerne runtime.
Alt hentes runtime, der er stort set ikke noget embedded.
Hvis den kan drejes så kan selve kompileringen af det hele og flytningen af resourcerne klares med et ant build script.
Jeg vil gerne at alle altid har adgang til alt, men at man 99% af tiden ikke skal lade repositories eller Flex jonglere med de her 5GB filer.
Hmm har ramt en lille mur her hvor det er svært at finde "best pratice" for flere mennesker på flere projekter med store assets.
case 1: Alt kode kompileres og swf uploades til systemet.
case 2: Alt kode kompileres og der er nye assets så swf's og disse uploades til systemet.
Lyder ret simpelt i den form, men åbenbart lidt kringlet at implementere.
Hils igen og hyg jer!
Mvh. Ricki
AS1 < AS2 < AS3