We use cookies to enhance your experience on the site
CodeWorlds

Feature Modules - Provinces of the Kingdom

Feature modules divide the application into logical parts - like provinces of feudal Japan, each with its own specialization.

Types of Modules

1. Feature Module (Province)

Groups business functionality:

1// features/samurai/samurai.module.ts
2@NgModule({
3  declarations: [
4    SamuraiListComponent,
5    SamuraiDetailComponent,
6    SamuraiFormComponent
7  ],
8  imports: [
9    CommonModule,
10    SharedModule,
11    SamuraiRoutingModule
12  ],
13  exports: [SamuraiListComponent]
14})
15export class SamuraiModule { }

2. Shared Module (Common Resources)

Contains reusable elements:

1// shared/shared.module.ts
2@NgModule({
3  declarations: [
4    ButtonComponent,
5    CardComponent,
6    LoadingSpinnerComponent,
7    HighlightDirective,
8    TruncatePipe
9  ],
10  imports: [CommonModule],
11  exports: [
12    // We export EVERYTHING that can be used in other modules
13    CommonModule,
14    ButtonComponent,
15    CardComponent,
16    LoadingSpinnerComponent,
17    HighlightDirective,
18    TruncatePipe
19  ]
20})
21export class SharedModule { }

3. Core Module (Command Center)

Singletons and elements loaded once:

1// core/core.module.ts
2@NgModule({
3  imports: [
4    CommonModule,
5    HttpClientModule
6  ],
7  providers: [
8    AuthService,
9    LoggingService,
10    { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
11  ]
12})
13export class CoreModule {
14  // Protection against multiple imports
15  constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
16    if (parentModule) {
17      throw new Error('CoreModule already loaded. Import only in AppModule!');
18    }
19  }
20}

Directory Structure

1src/app/
2β”œβ”€β”€ core/                      # Singleton services, guards, interceptors
3β”‚   β”œβ”€β”€ core.module.ts
4β”‚   β”œβ”€β”€ services/
5β”‚   β”‚   β”œβ”€β”€ auth.service.ts
6β”‚   β”‚   └── api.service.ts
7β”‚   β”œβ”€β”€ guards/
8β”‚   └── interceptors/
9β”‚
10β”œβ”€β”€ shared/                    # Reusable components, directives, pipes
11β”‚   β”œβ”€β”€ shared.module.ts
12β”‚   β”œβ”€β”€ components/
13β”‚   β”œβ”€β”€ directives/
14β”‚   └── pipes/
15β”‚
16β”œβ”€β”€ features/                  # Feature modules
17β”‚   β”œβ”€β”€ samurai/
18β”‚   β”‚   β”œβ”€β”€ samurai.module.ts
19β”‚   β”‚   β”œβ”€β”€ samurai-routing.module.ts
20β”‚   β”‚   β”œβ”€β”€ components/
21β”‚   β”‚   β”œβ”€β”€ services/
22β”‚   β”‚   └── models/
23β”‚   └── dojo/
24β”‚
25β”œβ”€β”€ app.module.ts
26β”œβ”€β”€ app.component.ts
27└── app-routing.module.ts
Go to CodeWorlds→