Logo
Back to Blog
BackendNestJSBackendArchitecture

Kiến trúc NestJS cho hệ thống Enterprise

October 7, 2026
2 min read
8 views
Kiến trúc NestJS cho hệ thống Enterprise

Kiến trúc NestJS cho hệ thống Enterprise

Khi xây dựng ứng dụng NestJS cho các doanh nghiệp lớn, việc chia layer rõ ràng là yếu tố sống còn. Nó không chỉ giúp code dễ đọc mà còn giúp team dễ dàng scale và maintain.

1. Layered Architecture (Kiến trúc phân tầng)

Chúng ta chia ứng dụng thành 3 tầng chính:

  • Controller Layer: Chỉ chịu trách nhiệm nhận HTTP Request, validate DTO và trả về HTTP Response.
  • Service Layer: Chứa toàn bộ Business Logic. Không phụ thuộc vào HTTP framework.
  • Repository Layer: Chịu trách nhiệm giao tiếp trực tiếp với Database (ORM/Query).

2. Ví dụ thực tế: Repository Pattern trong NestJS

Việc tách Repository giúp bạn dễ dàng thay đổi Database (ví dụ từ Mongoose sang Prisma) hoặc viết Unit Test dễ dàng bằng cách mock Repository.

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './schemas/user.schema';

@Injectable()
export class UserRepository {
  constructor(
    @InjectModel(User.name) private userModel: Model<UserDocument>
  ) {}

  async findByEmail(email: string): Promise<UserDocument | null> {
    return this.userModel.findOne({ email }).exec();
  }
}

3. Dependency Injection (DI)

DI trong NestJS giúp bạn quản lý instance của các class một cách tự động (Inversion of Control). Thay vì tự khởi tạo bằng từ khoá new, bạn chỉ cần tiêm (inject) qua constructor.

@Injectable()
export class UserService {
  constructor(private readonly userRepository: UserRepository) {}

  async getUser(email: string) {
    const user = await this.userRepository.findByEmail(email);
    if (!user) throw new NotFoundException('User not found');
    return user;
  }
}

Kiến trúc này đảm bảo nguyên tắc Separation of Concerns (SoC) và giúp dự án NestJS của bạn cực kì bền vững và dễ mở rộng!

Comments