Published on

NodeJS Clean Architecture - Business Domain và Technical Domain

Authors

Các bài viết cùng chuyên mục


NodeJS Clean Architecture

Trước khi vào bài viết: Coder kiếm cơm sẽ giải thích một vài từ ngữ: Business Domain:

  • Trong phát triển phần mềm, "Business Domain" hay "Core Business Domain" đề cập đến lĩnh vực kinh doanh cụ thể mà phần mềm đó được thiết kế để phục vụ. Đây là phần trọng tâm của hệ thống phần mềm và tập trung vào các quy trình, quy tắc kinh doanh và dữ liệu liên quan đến hoạt động chính của tổ chức.
  • Trong quá trình phát triển phần mềm, các nhà phân tích nghiệp vụ (Business Analysts), các nhà phát triển phần mềm và các chuyên gia trong ngành thường xuyên làm việc cùng nhau để đảm bảo rằng phần mềm phản ánh chính xác và đầy đủ business domain của tổ chức.

Technical Domain:

  • Trong phát triển phần mềm, "Technical Domain" hay "Infrastructure" đề cập đến các thành phần kỹ thuật và hạ tầng cần thiết để xây dựng, triển khai, và duy trì hệ thống phần mềm. Đây là phần phụ trợ giúp phần mềm hoạt động ổn định, bảo mật và hiệu quả.
  • Technical Domain (Infrastructure) đóng vai trò quan trọng trong việc đảm bảo rằng hệ thống phần mềm không chỉ được phát triển một cách hiệu quả mà còn vận hành ổn định, bảo mật và có khả năng mở rộng. Việc hiểu rõ và quản lý tốt Technical Domain là yếu tố then chốt để đạt được thành công trong bất kỳ dự án phần mềm nào.

Bài viết này tiếp nối từ một bài trình bày tổng quát hơn về Clean Architecture, mà bạn có thể tìm thấy tại đây: NodeJS Clean Architecture - Những nguyên tắc cơ bản và lợi ích

Hãy tưởng tượng ứng dụng của bạn như một câu chuyện phức tạp giữa hai nhân vật chính thiết yếu: Business Domain và Technical Domain. Sự tách biệt rõ ràng của chúng là nền tảng của Clean Architecture. Hãy khám phá cách phân chia này, như một bản nhạc được dàn dựng kỹ lưỡng, tối ưu hóa khả năng bảo trì, khả năng mở rộng và sự rõ ràng của mã nguồn của bạn.

Trong thế giới phức tạp của phát triển ứng dụng, Clean Architecture nổi bật với khả năng tách biệt rõ ràng Business Domain khỏi Technical Domain. Trong bài viết này, chúng ta sẽ khám phá chi tiết sự tách biệt giữa Business Domain và Technical Domain để đảm bảo quản lý tốt hơn các phức tạp của phần mềm, cũng như tầm quan trọng của các Use Cases như động lực thúc đẩy các quy tắc kinh doanh.

Hiểu về sự tách biệt: Business Domain vs Technical Domain

Trước khi đi vào chi tiết, điều quan trọng là phải hiểu bản chất của sự tách biệt này. Business Domain đại diện cho bản chất của ứng dụng, nơi các quy tắc kinh doanh và các khái niệm chính tồn tại. Ngược lại, Technical Domain bao gồm các chi tiết kỹ thuật, chẳng hạn như truy cập cơ sở dữ liệu hoặc quản lý các phụ thuộc bên ngoài. Sự phân biệt rõ ràng này đảm bảo quản lý hiệu quả các khía cạnh khác nhau của ứng dụng của bạn: các ràng buộc kỹ thuật không bị trộn lẫn với các quy tắc kinh doanh.

Business Domain

Business Domain là nơi chứa đựng logic kinh doanh, nơi các Entities và Use Cases tồn tại. Entities đại diện cho các đối tượng chính (các “yếu tố Business Domain”, những gì chúng ta “trình bày” cho doanh nghiệp), trong khi các Use Cases hướng dẫn việc thực hiện các quy tắc kinh doanh. Lớp này là trung tâm của ứng dụng, đảm bảo sự nhất quán và rõ ràng về chức năng.

Business Domain có thể được chia thành 2 lớp: Entities và Use Cases. Hãy bắt đầu với lớp đầu tiên trong Business Domain, Entities.

Bản chất của các Entities

Entities đại diện cho các khái niệm cơ bản của Business Domain. Chúng bao bọc dữ liệu và các quy tắc kinh doanh thiết yếu, đảm bảo tính nhất quán và toàn vẹn của thông tin. Hãy nghĩ về chúng như những diễn viên chính trong một vở kịch, mỗi người đều có một vai trò xác định trong câu chuyện.

Ví dụ, trong một ứng dụng quản lý đơn hàng, một Entities có thể đại diện cho một đơn hàng hoặc một sản phẩm.

Các Entities duy trì tính độc lập nghiêm ngặt khỏi các chi tiết kỹ thuật, đảm bảo khả năng tái sử dụng và khả năng mở rộng của chúng. Sự phân biệt rõ ràng này cho phép các nhà phát triển tập trung hoàn toàn vào logic kinh doanh mà không bị phân tâm bởi các cân nhắc kỹ thuật.

So sánh điều này với sự phân biệt giữa kịch bản của một vở kịch (Business Domain) và các cảnh (Technical Domain) - chương trình có thể phát triển mà không làm thay đổi cốt truyện chính.

Vai trò của các Use Cases

Các Use Cases mô tả chức năng của ứng dụng từ quan điểm của người dùng. Chúng phối hợp các hành động được thực hiện bởi các Entities để đáp ứng các yêu cầu chức năng của ứng dụng.

Ví dụ, một Use Cases có thể là “Tạo một đơn hàng mới” hoặc “Chỉnh sửa chi tiết sản phẩm”.

Các Use Cases cũng duy trì sự tách biệt rõ ràng khỏi Technical Domain, chỉ tập trung vào logic kinh doanh. Cách tiếp cận này cho phép mở rộng nhanh chóng, nơi chức năng có thể được thêm vào hoặc thay đổi mà không làm gián đoạn cấu trúc của ứng dụng.

Technical Domain

Ngược lại, Technical Domain là bối cảnh kỹ thuật của ứng dụng của bạn. Nó quản lý mọi thứ phía sau hậu trường, từ cơ sở dữ liệu đến các khung bên ngoài, đảm bảo rằng Business Domain vẫn cách ly khỏi các chi tiết kỹ thuật. Nó sẽ không bao giờ xâm phạm vào logic kinh doanh. Giống như một nhà đạo diễn kín đáo, đảm bảo rằng các chi tiết kỹ thuật không bao giờ làm ảnh hưởng đến sự rõ ràng và đơn giản của kịch bản chính.

Hãy nghĩ về lớp này như đội sản xuất trong thế giới điện ảnh, đảm bảo rằng chương trình diễn ra suôn sẻ trong khi vẫn vô hình với khán giả.

Quản lý Chi Tiết Kỹ Thuật

Technical Domain cũng cung cấp các giao diện để tương tác với các thành phần này. Ví dụ, thay vì truy cập trực tiếp một cơ sở dữ liệu cụ thể, Business Domain sử dụng một giao diện được xác định với Technical Domain để tương tác với dữ liệu.

Phân tách trách nhiệm

Cuối cùng, một đặc điểm thiết yếu của Technical Domain là khả năng phân tách trách nhiệm. Mỗi thành phần được thiết kế để thực hiện một nhiệm vụ cụ thể, giúp dễ dàng bảo trì và phát triển phần đó. Ví dụ, một thành phần chịu trách nhiệm truy cập dữ liệu có thể dễ dàng được thay thế hoặc nâng cấp mà không ảnh hưởng đến phần còn lại của ứng dụng hoặc thậm chí phần còn lại của phần kỹ thuật.

Lợi ích của sự tách biệt giữa Business Domain và Technical Domain

Sự phân biệt rõ ràng giữa Business Domain và Technical Domain mang lại nhiều lợi ích cho việc phát triển ứng dụng.

Bảo trì và mở rộng

Bằng cách cách ly logic kinh doanh khỏi phần còn lại của ứng dụng, Clean Architecture giúp dễ dàng bảo trì và phát triển mã nguồn. Những thay đổi được thực hiện đối với Technical Domain không ảnh hưởng đến Business Domain, cho phép cập nhật hoặc thay thế các thành phần kỹ thuật mà không làm gián đoạn chức năng kinh doanh.

Ví dụ, bạn có thể quyết định thay đổi đối tác gửi SMS mà không ảnh hưởng đến mã kinh doanh, vẫn không thay đổi.

Hiểu rõ về Mã nguồn

Sự phân biệt giữa Business Domain và Technical Domain làm cho mã nguồn trở nên rõ ràng và dễ hiểu hơn. Như tôi thường nói, nhóm PO thậm chí có thể nhìn vào phần Business Domain mà không cần phải có nền tảng kỹ thuật.

Các nhà phát triển có thể dễ dàng xác định các phần của ứng dụng chịu trách nhiệm về logic kinh doanh và các phần chịu trách nhiệm về các chi tiết kỹ thuật. Điều này giúp dễ dàng gỡ lỗi, cộng tác và bảo trì lâu dài.

Business Domain và Technical Domain, trái tim của Clean Architecture

Clean Architecture, với sự phân biệt giữa Business Domain và Technical Domain, cung cấp một phương pháp tiếp cận có cấu trúc và vững chắc cho việc phát triển ứng dụng. Bằng cách hiểu đầy đủ sự tách biệt này và tập trung vào các Entities và Use Cases như những trụ cột của Business Domain, bạn có thể tạo ra các ứng dụng mạnh mẽ, có khả năng mở rộng và dễ dàng bảo trì.

Bài viết này là phần giới thiệu về Clean Architecture và là một phần của loạt bài chuyên về chủ đề này. Hãy theo dõi để biết thêm thông tin nhé!

Take care, Coder kiếm cơm