inflearn logo

Thực hành Spring Boot DDD: Thiết kế Domain học qua hệ thống đặt hàng

Đây là khóa học dành cho những ai muốn học DDD nhưng còn cảm thấy mơ hồ về "cách áp dụng vào dự án thực tế". Trong khóa học này, chúng ta sẽ **trực tiếp xây dựng một hệ thống đặt hàng thực tế** dựa trên Spring Boot và triển khai thiết kế DDD cho đến bước cuối cùng. Khóa học không chỉ dừng lại ở lý thuyết đơn thuần mà tập trung vào "cấu trúc và mã nguồn có thể áp dụng ngay vào thực tế công việc". Sau khi hoàn thành khóa học, bạn có thể: ✔ Tự mình thiết kế các dự án dựa trên DDD ✔ Trực tiếp triển khai cấu trúc ở cấp độ thực tế công việc

(5.0) 2 đánh giá

46 học viên

Độ khó Cơ bản

Thời gian 2 tháng

Java
Java
REST API
REST API
Spring Boot
Spring Boot
MSA
MSA
backend
backend
Java
Java
REST API
REST API
Spring Boot
Spring Boot
MSA
MSA
backend
backend

Đánh giá từ những học viên đầu tiên

5.0

5.0

소준영

100% đã tham gia

Tôi đã tìm thấy khóa học này khi đang tìm kiếm bài giảng hỗ trợ cho bài kiểm tra năng lực của doanh nghiệp. Để học cách phát triển ở mức độ phù hợp cho bài kiểm tra mà không bị quá đà (over-engineering), tôi nghĩ mình cần thiết kế sao cho vừa cân nhắc đến khả năng mở rộng ở mức độ nhất định, vừa có thể dễ dàng chuyển đổi sang các cấu trúc như Multi-module hay MSA. Tôi đã biết sơ qua về khái niệm DDD, nhưng hầu hết các nội dung đều chuyên biệt cho MSA, vì vậy tôi đã đăng ký khóa học này vì nó bắt đầu từ nền tảng Monolith :) Các khái niệm cốt lõi của DDD ở mức độ phù hợp và kiến trúc cơ bản của Hexagonal dường như đã giúp ích cho tôi rất nhiều. Tuy nhiên, đúng như giảng viên thường xuyên nói trong bài giảng, tôi nhận thấy rằng việc áp dụng hoàn toàn kiến trúc này vào cấp độ bài kiểm tra là khá khó khăn. Thế nhưng, tôi đã hiểu rõ hơn về những phần cần cân nhắc để tăng khả năng mở rộng bằng cách tăng tính gắn kết (cohesion) và giảm tính phụ thuộc (coupling). Tôi nghĩ mình có thể tạo ấn tượng bằng một thiết kế không tuân thủ hoàn toàn DDD nhưng có mượn các nguyên tắc cốt lõi của nó. Đây là một bài giảng giúp tôi hiểu dễ dàng hơn về DDD - thứ mà nếu không biết sẽ cảm thấy rất nặng nề và khó khăn - và giúp tôi tiến bộ thêm một bước nữa. Cảm ơn vì bài giảng hay ạ :) Tôi sẽ đi thi thật tốt.

Bạn sẽ nhận được điều này sau khi học.

  • Bạn có thể tự mình xây dựng môi trường phát triển dựa trên Spring Boot để có thể bắt đầu thiết kế DDD.

  • Bạn có thể hiểu được cấu trúc dự án cơ bản và luồng thiết kế để bắt đầu một dự án DDD.

  • Bạn có thể tự mình tạo ra một nền tảng dự án hoạt động thực tế để học tập về DDD.

Giới thiệu khóa học

Khóa học này tập trung vào dự án Java backend dựa trên Spring Boot,
bắt đầu từ việc thiết kế REST API và dần dần mở rộng sang quy trình cấu trúc DDD và MSA.

Và cùng với các khái niệm cốt lõi của DDD (Thiết kế hướng tên miền),
chúng ta sẽ hiểu toàn bộ quy trình thiết kế tên miền dựa trên cấu trúc Clean Architecture / Hexagonal Architecture.


Tại sao cần DDD?

Trong cấu trúc Monolithic truyền thống, các vấn đề sau đây thường xảy ra:

  • Logic kinh doanh và mã kỹ thuật bị trộn lẫn với nhau

  • Phạm vi ảnh hưởng khi thay đổi trở nên lớn hơn

  • Quy tắc domain ngày càng trở nên mờ nhạt

Để giải quyết những vấn đề này, DDD đề xuất phương pháp thiết kế tập trung vào domain.



Hiểu cấu trúc tổng thể (Cốt lõi)


1. Cấu trúc Clean Architecture

  • Entities (Cốt lõi của Domain)

  • Use Case (Logic nghiệp vụ)

  • Interface Adapter (Controller, Presenter, v.v.)

  • Framework (DB, Web, v.v.)

Quy tắc cốt lõi:

👉 Sự phụ thuộc luôn luôn chảy từ bên ngoài → vào bên trong

Nói cách khác,
DB hay hệ thống bên ngoài không cần biết về domain
nhưng domain không được phụ thuộc vào công nghệ bên ngoài.


2. Hexagonal Architecture (Ports & Adapters)

Cấu trúc cụ thể hơn như sau:

  • Lõi ứng dụng (Application Core)

    • Use Case

    • Thực thể (Entity)

  • Input Port / Output Port

    • Giao diện kết nối với bên ngoài

  • Adapter

    • Web Adapter (Controller)

    • Persistence Adapter (DB)

    • Adapter hệ thống bên ngoài

Khái niệm cốt lõi:

👉 Logic nghiệp vụ chỉ kết nối với bên ngoài thông qua các cổng (port)


Tổng hợp các thành phần cốt lõi

Entity

  • Đối tượng cốt lõi của domain

  • Bao gồm các quy tắc kinh doanh

  • Hoàn toàn tách biệt với công nghệ bên ngoài

Use Case

  • Thực hiện logic dịch vụ thực tế

  • Thực hiện chức năng bằng cách kết hợp các Entity

Port

  • Giao diện kết nối với bên ngoài

  • Ranh giới mà Ứng dụng phụ thuộc vào

Adapter

  • Mã công nghệ thực tế triển khai Port

  • Đảm nhận việc kết nối DB, API và hệ thống bên ngoài


Khái niệm Bounded Context

Ngay cả khi dùng cùng một thuật ngữ, ý nghĩa vẫn có thể thay đổi tùy theo ngữ cảnh.

Ví dụ:

  • Đơn hàng (Order) = Quan điểm tạo đơn hàng

  • Đơn hàng (Order) = Quan điểm xử lý thanh toán

Vì vậy
👉 việc tách biệt các mô hình theo từng ngữ cảnh sẽ giúp giảm bớt độ phức tạp


Tổng kết (Cốt lõi của bài học này)

Điều cốt lõi mà bạn nhất định phải nắm vững trong bài học này là như sau.

  • Miền giá trị (Domain) luôn phải nằm ở vị trí trung tâm

  • Logic kinh doanh phải được tách biệt khỏi mã kỹ thuật

  • Các hệ thống bên ngoài chỉ được kết nối thông qua Adapter

  • Lý do chia cấu trúc là vì “khả năng bảo trì và tính mở rộng”


Hướng dẫn bước tiếp theo

Bây giờ, trong bài học tiếp theo
👉 Dựa trên cấu trúc Monolithic hiện tại
👉 Chúng ta sẽ tiến hành quá trình tái cấu trúc (refactoring) sang cấu trúc DDD thực tế.

Điểm mấu chốt là kết nối luồng áp dụng vào mã nguồn
trong khi đã hiểu rõ các khái niệm.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển muốn học DDD nhưng chưa biết phải bắt đầu dự án như thế nào.

  • Nhà phát triển backend muốn lần đầu tiên thử tạo dự án DDD dựa trên Spring Boot

  • Nhà phát triển muốn học cấu trúc dự án DDD có thể áp dụng vào thực tế và cách bắt đầu.

Cần biết trước khi bắt đầu?

  • Hiểu cú pháp cơ bản của Java

  • Kinh nghiệm sử dụng Spring Boot cơ bản

Xin chào
Đây là truthwing

Lập trình viên 15 năm kinh nghiệm · Lập trình viên đã tạo ra cấu trúc thu nhập 10 triệu won mỗi tháng

Tôi không chỉ đơn thuần dạy lập trình.
Tôi cung cấp các tiêu chí để bạn có thể đánh giá liệu “phát triển phần mềm có phải là con đường dành cho mình hay không”.

Tôi cùng bạn thiết kế chiến lược sự nghiệp thực tế dành cho những người không chuyên, người đang tìm việc và những ai đang cân nhắc chuyển đổi nghề nghiệp.

Thêm

Chương trình giảng dạy

Tất cả

18 bài giảng ∙ (2giờ 39phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

2 đánh giá

5.0

2 đánh giá

  • ffdfig1967님의 프로필 이미지
    ffdfig1967

    Đánh giá 3

    Đánh giá trung bình 5.0

    Đã chỉnh sửa

    5

    100% đã tham gia

    Tôi đã tìm thấy khóa học này khi đang tìm kiếm bài giảng hỗ trợ cho bài kiểm tra năng lực của doanh nghiệp. Để học cách phát triển ở mức độ phù hợp cho bài kiểm tra mà không bị quá đà (over-engineering), tôi nghĩ mình cần thiết kế sao cho vừa cân nhắc đến khả năng mở rộng ở mức độ nhất định, vừa có thể dễ dàng chuyển đổi sang các cấu trúc như Multi-module hay MSA. Tôi đã biết sơ qua về khái niệm DDD, nhưng hầu hết các nội dung đều chuyên biệt cho MSA, vì vậy tôi đã đăng ký khóa học này vì nó bắt đầu từ nền tảng Monolith :) Các khái niệm cốt lõi của DDD ở mức độ phù hợp và kiến trúc cơ bản của Hexagonal dường như đã giúp ích cho tôi rất nhiều. Tuy nhiên, đúng như giảng viên thường xuyên nói trong bài giảng, tôi nhận thấy rằng việc áp dụng hoàn toàn kiến trúc này vào cấp độ bài kiểm tra là khá khó khăn. Thế nhưng, tôi đã hiểu rõ hơn về những phần cần cân nhắc để tăng khả năng mở rộng bằng cách tăng tính gắn kết (cohesion) và giảm tính phụ thuộc (coupling). Tôi nghĩ mình có thể tạo ấn tượng bằng một thiết kế không tuân thủ hoàn toàn DDD nhưng có mượn các nguyên tắc cốt lõi của nó. Đây là một bài giảng giúp tôi hiểu dễ dàng hơn về DDD - thứ mà nếu không biết sẽ cảm thấy rất nặng nề và khó khăn - và giúp tôi tiến bộ thêm một bước nữa. Cảm ơn vì bài giảng hay ạ :) Tôi sẽ đi thi thật tốt.

    • truthwing
      Giảng viên

      Oa! Cảm ơn bạn rất nhiều vì những đánh giá tích cực về khóa học. Tôi đã cố gắng truyền tải ý định khi áp dụng DDD và cảm thấy rất xứng đáng khi bạn đã hiểu rõ nó! Chúc bạn sẽ vượt qua kỳ thi nhé!!

  • libido90090님의 프로필 이미지
    libido90090

    Đánh giá 5

    Đánh giá trung bình 5.0

    5

    30% đã tham gia

    • truthwing
      Giảng viên

      Cảm ơn bạn vì đánh giá khóa học tích cực nhé~! Mình sẽ đền đáp bằng những bài giảng và phản hồi tốt hơn nữa trong tương lai~! Bất cứ lúc nào bạn cũng có thể thoải mái đặt câu hỏi nhé~

Khóa học khác của truthwing

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Giảm 25% cho thành viên mới

739.037 ₫

25%

985.387 ₫