La structure LIFT
La structure proposée s'appuie sur la recommandation officielle
LIFT.
Do structure the application such that you can Locate code quickly, Identify the code at a glance,
keep the Flattest structure you can, and Try to be DRY.
-
Locate:
Organisez le code pour que la localisation des éléments soit intuitive, simple et rapide.
-
Identify:
Nommez le fichier pour identifier instantanément ce qu'il représente et ce qu'il contient.
Pour ce faire, le nom du fichier doit être descriptif.
Évitez les fichiers mélangeant plusieurs composants ou services.
-
Flat:
Conservez la structure la plus à plat aussi longtemps que possible.
Envisagez de créer des sous-dossiers lorsqu'un dossier atteint sept fichiers ou plus.
-
T-DRY (Try to be DRY):
Respectez le principe DRY.
Évitez toutefois de sacrifier la lisibilité juste pour suivre à la lettre le principe DRY.
L'arborescence des fichiers
-
api
-
models
- entity-a.api.model.ts
- entity-b.api.model.ts
-
services
- domain-a.api.service
- domain-b.api.service
-
app
-
components
-
ui
-
shared-button
- shared-button.component.html|scss|ts
-
constants
- constant-a.ts
- constant-b.ts
-
directives
-
enums
-
features
-
feature-a
-
components
-
scoped-component-a
- scoped-component-a.component.html|scss|ts
-
scoped-component-b
- scoped-component-b.component.html|scss|ts
-
models
- scoped-model-a.model.ts
- scoped-model-b.model.ts
-
pages
-
services
- scoped-service-a.service.ts
- scoped-service-b.service.ts
- feature-a.component.html|scss|ts
- feature-a.routes.ts
-
guards
- auth.guard.ts
- module-import.guard.ts
- no-auth.guard.ts
-
helpers
-
interceptors
- token.interceptor.ts
- error.interceptor.ts
-
models
-
services
- service-a.service.ts
- service-b.service.ts
-
pages
-
page-not-found
- page-not-found.page.html|scss|ts
-
pipes
- app.component.html|scss|ts
- app.routes.ts
-
assets
-
i18n
-
documents
-
icons
- custom-icon-a.svg
- custom-icon-b.svg
-
images
- favicon.icon
- index.html
- maint.ts
- styles.scss
Tous vos composants, vos services, directives, ... doivent être déclarés en tant que standalone.
Suivez l'approche CDD (Component-Driven Development) pour organiser vos composants.
Adoptez le on push change detection strategy pour améliorer les performances de votre application.
Utilisez la nouvelle syntaxe offert par le control-flow pour simplifier et booster la lisibilité de votre code.
Organisez votre code par feature.
Cela permet de regrouper les composants, services, modèles et autres par domaine.
Alignez vos features sur vos routes.
Cela permet de faciliter la navigation dans votre application.
Séparez le code propre de vos apis dans un dossier distinct de votre application.
Regroupez vos composants de base partagés dans un sous-dossier ui
.
Si vous avez des pages de CRUD, créez des pages distinctes pour la création, l'édition et le détail.
Cela permet de séparer les responsabilités et de rendre le code plus facile à maintenir.
Note: Créez un composant de formulaire réutilisable partagé entre la création et l'édition.
Exemple concret
Si vous avez les routes suivantes dans votre application :
- /dashboard
- /users
- /users/list
- /users/detail/:id
- /users/create
- /users/edit/:id
Alors organisez votre application comme ceci :
src/
|-- app/
| |-- features/
| | |-- dashboard/ # Feature module for the /dashboard route
| | | |-- pages/ # Folder for page components in the dashboard feature
| | | |-- components/ # Folder for reusable components specific to the dashboard feature
| | | |-- services/ # Folder for services specific to the dashboard feature
| | |-- users/ # Feature module for the /users route
| | | |-- pages/ # Folder for page components in the users feature
| | | | |-- create/ # Page used to create a new user
| | | | |-- edit/ # Page used to edit an existing user
| | | | |-- list/ # Page used to list all users
| | | | |-- detail/ # Page used to display the details of a user
| | | |-- components/ # Folder for reusable components specific to the users feature
| | | |-- services/ # Folder for services specific to the users feature
|-- ...
Documentation:
Angular File Structure and Best Practices
Tips for Structuring Your Angular Project
How to define a highly scalable folder structure for your Angular project
Angular schematics extension VS Code
Github: Angular Folder Structure
Angular App Architecture: Don’t get Lost in Structure
How to structure your Angular apps like a Googler
Angular.io: Workspace and project file structure
Angular.io Styleguide: Application structure and NgModules
Angular project structure best practice