[EDIT] ho scritto un articolo sul mio blog per spiegare le cose in maggiori dettagli:
read it on sam-dev.net e si può ora read part II, con codice di esempio.
Risponderò alla mia domanda. Non perché penso che sia l'approccio migliore, ma solo perché è quello con cui ho deciso di andare.
Questo è il modo che ho diviso i miei moduli di business in cartelle
- app
- businessModule
- controllori
- index.js
- firstCtrl.js
012.
- secondCtrl.js
- direttive
- servizi
- vista
- filtri
- anotherBusinessModule
- condiviso
- app.js
- index.html
Ogni modulo ha una propria struttura di cartelle per i controllori, direttive, ecc ...
Ogni cartella ha un file index.js e poi altri file per separa ciascun controller, ogni direttiva, ecc ..
Il file index.js contiene la definizione del modulo. Per esempio per i controllori della businessModule sopra:
angular.module('myCompany.businessModule.controllers', []);
C'è dipendenze qui, ma ci potrebbe essere qualsiasi.
Poi nel firstCtrl.js, posso riutilizzare quel modulo e aggiungere il controllore ad esso:
angular.module('myCompany.businessModule.controllers').controller('firstCtrl',
function(){
});
Poi i app.js aggrega tutto il modulo che voglio per la mia applicazione aggiungendoli alle dipendenze array.
angular.module('myApp', ['myCompany.businessModule', 'myCompany.anotherBusinessModule']);
La cartella condivisa contiene le direttive e le altre cose che non sono specifici di un modulo di business e che può essere riutilizzato ovunque.
Ancora una volta, non so se è l'approccio migliore, ma sicuramente funziona per me. Forse può ispirare altre persone.
EDIT
Poiché i file index.js contengono dichiarazioni moduli, devono essere fatto riferimento nella pagina HTML prima di qualsiasi altro script di applicazione. Per fare ciò, ho usato l'IBundleOrderer di ASP.NET MVC 4:
var bundle = new ScriptBundle("~/bundles/app") { Orderer = new AsIsBundleOrderer() };
bundles.Add(bundle.IncludeDirectory("~/app", "*.js", true));
public class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
files = files.OrderBy(x => x.Name == "index.js" ? 0 : 1);
return files;
}
}
Non è necessario creare un'unica app se si dispone di più app non correlate, basta creare un'app per azienda. Un'app può riutilizzare altri servizi, controller e direttive di app. Ricorda che una "web app" è ancora una pagina web, non importa quale, non è come un software desktop. – mpm
Forse mi sono espresso in modo errato. Ho solo un'app, ma è GRANDE. E voglio dividerlo in vari moduli aziendali. Ogni modulo aziendale contiene il proprio insieme di viste, direttive, controller, ecc. Ma alla fine, è la stessa applicazione Web, con un solo punto di accesso. È un buon approccio e come dovrei organizzare il mio codice? – Sam
non importa, spetta a te dividere i file come desideri. Alcune persone usano 1 file per servizio, controller o direttiva, alcune persone lo dividono per 'caratteristica', non importa davvero a causa dell'iniezione di dipendenza. puoi riaprire un modulo attraverso più file, ecc ... in realtà è una questione di gusti. Alla fine hai solo bisogno di tutti i tuoi file js nel tuo html. Personalmente ho 1 file per tipo (1 file per i servizi, 1 per le direttive, 1 per i controller) anche per le app di grandi dimensioni. – mpm