Italian [B4J] Very large app - come organizzare il progetto?

amorosik

Expert
Licensed User
Quando si tratta di qualche schermata e' ovvio che sta tutto dentro unica directory, si aggiorna la', si compila, si debugga, e tutto finisce la'

Ma supponiamo di prepararci ad avviare un progetto corposo, con centinaia di schermate diverse, centinaia di moduli di codice, centinaia di stampe, come procedereste?
Mi spiego meglio, l'obiettivo vorrebbe essere avere la possibilita' di lavorare su una sezione dell'intero progetto:
-1 senza necessita' di ricompilare il tutto ogni volta, ma solo la sezione sulla quale si sono eseguite le modifiche
-2 mantenendo comunque una porzione di codice comune tra tutte le sezioni

Ad esempio, chiamiamo il progetto SUPER-MEGA-GESTIONALE
Potrebbe essere diviso in varie unita' funzionali, ad esempio Anagrafiche base, Magazzino, Acquisti, Vendite, Contabilita', Tracciabilita', Vendita al Banco, ecc..
Tutte queste unita' funzionali avranno delle routine comuni, che per semplicita' diremo contenute dentro uno o piu' moduli comuni, ad esempio FUNZIONI_GLOBALI, NETWORK, SYSTEM, ecc..
Bene, come fare per organizzare il progetto in modo che sia possibile lavorare sulla sezione Acquisti, compilando, avviando, debuggando, solo quella sezione li'?
(ricordo il fatto che la sezione Acquisti, come tutte le altre, dovrebbe condividere con le altre sezioni le funzioni contenute nei moduli comuni)

La prima idea che mi viene in mente e' predisporre una directory principale, ad esempio GESTIONALE1, con all'interno tanti progetti B4J quante sono le unita' funzionali e quindi Anagrafiche, Magazzino, Acquisti, ecc.., ed una directory riservata per contenere i moduli comuni e quindi FUNZIONI_GLOBALI, NETWORK, ecc..
La modifica, compilazione di un singolo progetto non dovrebbe interferire con gli altri, a meno che non venga modificato codice nei moduli comuni
L'eventuale modifica codice dei moduli comuni ovviamente potrebbe portare a dei cambiamenti anche a tutti gli altri progetti, ed una necessaria ricompilazione
Per questo potrebbe essere creato uno script da avviare per la ricompilazione in automatico di tutti i progetti

Questa e' la prima idea, che pero' raramente e' la migliore, per questo chiedo a voi, dovendo avviare un 'very large project' come fareste?
(dove per 'migliore' intendo la piu' scalabile con l'aumentare dimensioni progetto, la piu' efficiente, la piu' ordinata, la meglio documentabile in automatico, ecc...)
 

Star-Dust

Expert
Licensed User
Longtime User
Puoi condividere classi su più progetti. Se modifichi una classe comune e questa modifica è su un metodo che è usato da piu progetti, ricompili tutti quei progetti. Come suggerisce @LucaMs diventa modulare e facilita l'aggiornamento.

Qualcuno l'ha gia fatto, ed è descritto nel forum italiano. Puoi fare anche l'auto aggiornamento con un modulo che si occupa di questo.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
-1 senza necessita' di ricompilare il tutto ogni volta, ma solo la sezione sulla quale si sono eseguite le modifiche
@amorosik stiamo realizzando la stessa applicazione: quanta energia sprecata 😢;
anche io ho esposto il tuo stesso quesito sul forum molto tempo fa;

le ipotesi sono tre:

1) creare una applicazione (una sorta di toolbar menu), che "lancia/esegue" le altre mini applicazione -Anagrafica Articoli, Anagrafica Azienda, .Parametri NET, Configurazione registratore di cassa.. ... ... ...
[quindi TANTISSIME piccole applicazioni b4j]

2) scomporre il SUPER-MEGA-GESTIONALE in SUB-MEGA-GESTIONALI (anagrafiche, modulo vendite, modulo contabilità, modulo cassa.. ... ...)
[quindi ci sarà una applicazione MAIN con funzioni minime/essenziali in grado di eseguire uno dei moduli descritti in precedenza]

per "aggirare" la compilazione di un progetto a seguito di una modifica di una libreria (sia di tipo jar/xml oppure b4xlib) si può inserire
nel modulo MAIN, nella sezione #Region Project Attributes, il seguente attributo:
#MergeLibraries: False
in questo caso TUTTE le librerie vanno copiate nella cartella LIBS, rendendo la compilazione più veloce; in pratica nella applicazione JAR generata NON sono incluse le libreria; questo comporta che in fase di distribuzione della applicazione JAR, bisogna distribuire la cartella LIBS.

3) un linguaggio semi interpretato (simile a PHP, ASP in ambito web)
 
Top