Why Providers Encapsulate Business Logic in NestJS
📖 Scenario: You are building a simple NestJS service to manage a list of books in a library. You want to keep the code clean and organized so that the logic for managing books is separate from the controller that handles HTTP requests.
🎯 Goal: Build a NestJS provider (service) that encapsulates the business logic for managing books, and use it in a controller to handle requests.
📋 What You'll Learn
Create a provider class called BooksService that holds the book data and methods
Add a configuration variable maxBooks to limit how many books can be added
Implement a method addBook in BooksService that adds a book only if the limit is not reached
Create a controller BooksController that uses BooksService to add and list books
💡 Why This Matters
🌍 Real World
In real apps, providers hold business rules like data validation, calculations, or database access, keeping controllers simple.
💼 Career
Understanding providers is key for backend developers using NestJS to build scalable, maintainable server applications.
Progress0 / 4 steps
1
Create the initial book data in the provider
Create a NestJS provider class called BooksService with a private array property books initialized to an empty array.
NestJS
Hint
Use private books: string[] = []; inside the class to hold the book list.
2
Add a configuration variable for maximum books
Inside the BooksService class, add a private readonly property called maxBooks and set it to 3.
NestJS
Hint
Use private readonly maxBooks = 3; to set the limit.
3
Implement the addBook method with limit check
In the BooksService class, add a public method addBook that takes a title: string. It should add the title to books only if the current length is less than maxBooks. Return true if added, otherwise false.
NestJS
Hint
Check the length of this.books before adding the new title.
4
Create a controller that uses the provider
Create a NestJS controller class called BooksController that injects BooksService via the constructor. Add a method addNewBook that calls addBook on the service with a string 'NestJS Guide'.
NestJS
Hint
Inject BooksService in the constructor and call addBook inside addNewBook.
Practice
(1/5)
1. Why do NestJS providers encapsulate business logic instead of placing it directly in controllers?
easy
A. To make the app run faster
B. Because controllers cannot contain any code
C. To keep the code organized and separate concerns
D. Because providers handle user interface rendering
Solution
Step 1: Understand roles of controllers and providers
Controllers handle requests and responses, while providers hold the main business rules and logic.
Step 2: Recognize separation of concerns
Separating logic into providers keeps code organized, easier to test, and reusable.
Final Answer:
To keep the code organized and separate concerns -> Option C