Các design pattern cần biết khi làm việc với NestJS

Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
Các design pattern cần biết khi làm việc với NestJS
Các design pattern cần biết khi làm việc với NestJS

NestJS tổng hợp hàng tá các design patterns (DP) khác nhau trong kiến trúc của mình. Có một số DP cũng khá là quen thuộc với mọi người đấy ^_^.

 

Singleton

Singleton là một trong những DP nổi tiếng nhất trong giới lập trình. Về cơ bản, bạn sẽ sử dụng DP này khi bạn cần giới hạn lại số lượng instances của một class nào đó.

Việc khởi tạo cũng khá đơn giản.

  • Tạo một class với private constructor().
  • Khai báo một phương thức static. Phương thức này sẽ tạo mới instance nếu chưa tồn tại, sau đó sẽ trả về một instance của class.

DP này thường được sử dụng trong một số DP khác như Abstract Factory Pattern hoặc Builder Pattern. Bạn cũng có thể sử dụng nó trong Facades Pattern - đảm bảo chỉ duy nhất 1 class được khởi tạo lúc runtime.

class MySingleton {
  private static instance: MySingleton

  private constructor() {}

  static instance() {
    if (!this.instance) {
      this.instance = new MySingleton()
    }

    return this.instance
  }
}

console.log(MySingleton.instance() === MySingleton.instance()) // true

new MySingleton() // throw exception

 

Fluent Interface

Rất thường được sử dụng trong một số ORM như TypeORM, Sequelize,...

Lợi ích chủ yếu của nó là giúp code của bạn dễ đọc, dễ hiểu, cũng như liền mạch hơn. 

Cách triển khai cũng khá đơn giản. Ví dụ bạn có một class kèm theo một số methods khác nhau. Lúc này, các methods builder bạn sẽ return this sau khi thực hiện logic - điều này giúp bạn có thể tiếp tục chuỗi phương thức mà không cần sang dòng code mới. Chuỗi phương thức sẽ kết thúc khi chạm tới một method không return this.

class Pet {
  private _type: string | null

  private _name: string | null

  private _age: number | null

  private _legs: number | null

  type(value: string) {
    this._type = value

    return this
  }

  name(value: string) {
    this._name = value

    return this
  }

  age(value: number) {
    this._age = value

    return this
  }

  legs(value: number) {
    this._legs = value

    return this
  }

  getInfo(): string {
    return `Your ${this._type} ${this._name} - ${this._age} year(s) old - has ${this._legs} legs`
  }
}

const newPet = new Pet().type('dog').name('Mina').age(3).legs(4)

console.log(newPet.getInfo()) // Your dog Mina - 3 year(s) old - has 4 legs

Nếu bạn không dùng Fluent Interface thì bạn sẽ phải gọi tuần tự trên từng dòng

const newPet = new Pet()
newPet.type('dog')
newPet.name('Mina')
newPet.age(3)
newPet.legs(4)

Đọc thôi là thấy mệt rồi đó ^.~

 

MVC - Model View Controller

DP này quá nổi tiếng rồi. Về cơ bản là nó chia ứng dụng thành 3 phần:

  • Model chịu trách nhiệm xử lý business logic, thao tác dữ liệu...
  • View chịu trách nhiệm xử lý và hiển thị nội dung cho client.
  • Controller chịu trách nhiệm tiếp nhận request và điều hướng xuống Model xử lý logic, sau đó đem kết quả từ Model truyền sang View.

Bạn có thể tham khảo chi tiết về mô hình này qua bài viết này của mình https://duypt.dev/laravel-va-mau-thiet-ke-hmvc.

 

Comments

Bài viết nổi bật

Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé.
PHP là ngôn ngữ được sử dụng rộng rãi nhất trên thế giới trong lập trình web. Nó cũng bị ghét nhất. Nhưng tại sao nhiều developer lại ghét nó đến vậy? Hôm nay chúng ta hãy cùng tìm hiểu lý do xem chúng có thuyết phục không nhé ^_^
Có khá nhiều bạn đã yêu cầu mình một bài viết về Repository Design Pattern. Vậy mục đích của nó là gì? Nó có thực sự cần thiết cho ứng dụng của bạn hay không? Những điểm mạnh, điểm yếu của nó là gì? Chúng ta cùng đi sâu tìm hiểu qua bài viết này nhé.
Lúc trước mình hay sử dụng cách này trên laptop phụ của mình, giờ mua license luôn rồi. Hôm nay mình xin chia sẻ cho bạn nào cần nhé.
Ở bài viết này mình sẽ hướng dẫn bạn bắt đầu xây dựng một ứng dụng HMVC với Laravel, và tận dụng sức mạnh của Composer khi quản lí modules.

Mục lục

Related posts

Javascript là một thành phần không thể thiếu đối với frontend developers. Tuy nhiên, ngay từ lúc ra đời, nó đã tồn tại khá nhiều vấn đề cần khắc phục. Đó là lý do tại sao từ 2015 (ES6) tới 2021 (ES12) ra đời nhằm giúp Javascript trở nên tốt hơn.
Dạo này mình làm việc với mấy bạn trên github, thấy hay xài mấy từ viết tắt mà mình không hiểu lắm. Thôi thì tổng hợp lại một list các từ viết tắt hay dùng trong github luôn cho ai cần :D
Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé.
Cách bỏ qua câu lệnh --set-upstream quen thuộc cho các con lười
Mình sẽ giới thiệu 2 cách để xóa một property trong Javascript Object. Một cách sử dụng mutable - toán tử delete, một cách còn lại là immutable - tính năng Object Restructuring.
Đây là một khái niệm rất quan trọng trong Functional Programming. Ở đây mình sẽ cho ví dụ dựa trên Javascript, cụ thể là TypeScript, do đó mình hi vọng các bạn đã có một số kiến thức nhất định về JS trước. Điều này sẽ giúp bạn nắm bắt nội dung bài viết dễ dàng hơn.
NestJS - Providers
1210
Providers là thành phần cơ bản và cực kỳ quan trọng trong Nest để thực hiện Dependency Injection.
Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
NestJS - Controllers
1477
Trách nhiệm chính của controllers là xử lý các requests và phản hồi lại cho phía client.
Lúc trước mình hay sử dụng cách này trên laptop phụ của mình, giờ mua license luôn rồi. Hôm nay mình xin chia sẻ cho bạn nào cần nhé.
NestJS là một NodeJS framework tiến bộ để xây dựng các ứng dụng server-side hiệu quả, đáng tin cậy cùng với khả năng mở rộng dễ dàng.
Qua series này, các bạn sẽ hiểu hơn về sức mạnh của NodeJS cũng như xây dựng một kiến trúc ứng dụng xanh sạch đẹp hết sức có thể, thỏa mãn tinh thần Test - Driven Development.

Tin mới nhất

Javascript là một thành phần không thể thiếu đối với frontend developers. Tuy nhiên, ngay từ lúc ra đời, nó đã tồn tại khá nhiều vấn đề cần khắc phục. Đó là lý do tại sao từ 2015 (ES6) tới 2021 (ES12) ra đời nhằm giúp Javascript trở nên tốt hơn.
Dạo này mình làm việc với mấy bạn trên github, thấy hay xài mấy từ viết tắt mà mình không hiểu lắm. Thôi thì tổng hợp lại một list các từ viết tắt hay dùng trong github luôn cho ai cần :D
Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé.
Cách bỏ qua câu lệnh --set-upstream quen thuộc cho các con lười
Bài viết này sẽ hướng dẫn các bạn cài đặt LEMP stack trên CentOS Stream 9 mới nhất trên Vultr Cloud VPS.
Mình sẽ giới thiệu 2 cách để xóa một property trong Javascript Object. Một cách sử dụng mutable - toán tử delete, một cách còn lại là immutable - tính năng Object Restructuring.
Đây là một khái niệm rất quan trọng trong Functional Programming. Ở đây mình sẽ cho ví dụ dựa trên Javascript, cụ thể là TypeScript, do đó mình hi vọng các bạn đã có một số kiến thức nhất định về JS trước. Điều này sẽ giúp bạn nắm bắt nội dung bài viết dễ dàng hơn.
Bài hướng dẫn này sẽ hướng dẫn các bạn cài đặt LEMP stack (Linux - Nginx - MySQL - PHP) trên CentOS 8.
NestJS - Providers
1210
Providers là thành phần cơ bản và cực kỳ quan trọng trong Nest để thực hiện Dependency Injection.
Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
NestJS - Controllers
1477
Trách nhiệm chính của controllers là xử lý các requests và phản hồi lại cho phía client.
Javascript là một thành phần không thể thiếu đối với frontend developers. Tuy nhiên, ngay từ lúc ra đời, nó đã tồn tại khá nhiều vấn đề cần khắc phục. Đó là lý do tại sao từ 2015 (ES6) tới 2021 (ES12) ra đời nhằm giúp Javascript trở nên tốt hơn.
NestJS - Providers
1210
Providers là thành phần cơ bản và cực kỳ quan trọng trong Nest để thực hiện Dependency Injection.
Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
Một số design patterns chính đang được sử dụng bởi NestJS mà bạn cần nắm rõ để làm việc với NestJS hiệu quả hơn.
NestJS - Controllers
1477
Trách nhiệm chính của controllers là xử lý các requests và phản hồi lại cho phía client.