# Project Structure

Pour profiter au maximum du [Lazy Loading](https://guide-angular.wishtack.io/angular/routing/lazy-loading), **pensez à bien décomposer vos applications en petits modules dès le départ** !

Il est également intéresser de séparer les [Routed Feature Modules](https://guide-angular.wishtack.io/angular/project-structure-and-modules/feature-module) et les [Domain Feature Modules](https://guide-angular.wishtack.io/angular/project-structure-and-modules/feature-module) ou les [Widget Feature Module](https://guide-angular.wishtack.io/angular/project-structure-and-modules/feature-module)s tout en essayant de suivre avec les Routed Feature Modules l'arborescence de "Routing".

Les "Routed Feature Modules" ne contiennent que des **"View Components"**. **Ces composants suffixés par `View` sont couplés au "Routing"** *(Cf.* [*https://blog.wishtack.com/2017/05/05/the-guide-to-building-quality-angular-2-components/*](https://blog.wishtack.com/2017/05/05/the-guide-to-building-quality-angular-2-components/)*)*.

```bash
├── app-routing.module.ts
├── app.module.ts
├── auth
├── book
│   ├── book-list
│   ├── book-preview
│   └── book-search
├── user
└── views
    ├── admin
    │   ├── admin-routing.module.ts
    │   ├── dashboard-view
    │   └── settings
    │       ├── settings-routing.module.ts
    │       └── settings-view
    ├── book
    │   ├── book-detail-view
    │   ├── book-list-view
    │   └── book-routing.module.ts
    └── cart
        ├── cart-detail-view
        └── cart-routing.module.ts
```

**Les "Domain, Service et Widget Feature Modules"&#x20;*****(`auth`, `book`, `user`)*****&#x20;sont indépendants du fonctionnement et de la configuration du "Routing"**. Ils peuvent être réutilisés peu importe le contexte.

En revanche les **Routed Modules** et les **View Components** sont fortement couplés au "Routing" et nous permettent d'imaginer rapidement la configuration du "Routing" :

```bash
/admin/dashboard => DashboardViewComponent
/admin/settings => SettingsRoutingModule => SettingsViewComponent
/book/detail/... => BookDetailView
/book/list => BookListView
/cart => CartDetailView
```
