inflearn logo

Toby's Clean Spring - Domain Model Pattern và Hexagonal Architecture Phần 2

Clean Spring của Toby là một khóa học giúp bạn trải nghiệm quá trình phát triển mã nguồn sạch (Clean Code) và các nguyên tắc phát triển Spring theo từng bước, tương tự như quy trình làm việc thực tế của một đội ngũ phát triển tại startup giả định đang vận hành dịch vụ giáo dục trực tuyến mang tên Splearn, nhằm mục tiêu phát triển nhanh chóng, ổn định, linh hoạt và dễ bảo trì.

(5.0) 2 đánh giá

73 học viên

Độ khó Cơ bản

Thời gian Không giới hạn

Java
Java
Spring
Spring
Spring Boot
Spring Boot
JPA
JPA
Refactoring
Refactoring
Java
Java
Spring
Spring
Spring Boot
Spring Boot
JPA
JPA
Refactoring
Refactoring

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

  • Cách cấu trúc bên trong kiến trúc Hexagonal bằng các thành phần ứng dụng (application components)

  • Chiến lược triển khai và phát triển logic domain phức tạp một cách an toàn bằng mô hình Domain Model Pattern

  • Kinh nghiệm thực tế trong việc xem xét các đánh đổi thiết kế và cải thiện thiết kế hiện tại thông qua tái cấu trúc (refactoring)

  • Phát triển test fixture sử dụng dữ liệu ngẫu nhiên và phương pháp viết test hiệu quả

  • Cách kiểm chứng quy tắc quan hệ phụ thuộc giữa các thành phần bằng ArchUnit

  • Kỹ thuật thiết kế giải quyết vấn đề phụ thuộc hai chiều bằng cách sử dụng DIP

Thời đại giao phó mã nguồn cho AI,
thứ nhà phát triển cần là khả năng phán đoán và năng lực thiết kế developers need

Nếu chỉ giao phó việc phát triển cho AI, kết quả rất dễ tạo ra những đoạn mã Spring ở mức trung bình nhất, thậm chí là lẫn lộn cả những anti-pattern.

Ngay cả khi AI viết mã, việc đánh giá cuối cùng và chịu trách nhiệm vẫn thuộc về lập trình viên. Việc quyết định sự đánh đổi nào là tốt nhất, cũng như việc tạo ra các tài liệu thiết kế mô hình miền, hướng dẫn phát triển và kiểm thử kiến trúc để làm khung dẫn dắt cho AI, đều phụ thuộc vào lập trình viên.

Cuối cùng, sức mạnh để kiểm soát AI đến từ kiến trúc, mô hình miền,
và kỹ năng thiết kế mã nguồn dễ bảo trì.




Nâng cao năng lực 1. Khả năng phán đoán của nhà phát triển

Trở thành một đội với Toby để cùng
tạo ra dịch vụ Spring.

<토비의 클린 스프링> là khóa học giúp bạn cùng phát triển dịch vụ giáo dục trực tuyến giả tưởng mang tên ‘Splearn’, trải nghiệm toàn bộ quá trình từ lập kế hoạch đến thiết kế, triển khai và cấu trúc lại mã nguồn (refactoring) như trong thực tế.

Các bạn sẽ trở thành một đội cùng với Toby để hoàn thành một dịch vụ. Qua từng giai đoạn, bạn sẽ được theo sát quá trình tư duy của một nhà phát triển 31 năm kinh nghiệm về việc cần cân nhắc điều gì và nên đưa ra quyết định như thế nào. Thông qua quá trình này, bạn sẽ rèn luyện được khả năng thấu hiểu ngữ cảnh về việc công nghệ nào "cần thiết khi nào và tại sao", cũng như "tại sao lại thiết kế theo cấu trúc này".

Lộ trình <Toby's Clean Spring>
Đây là chuỗi bài giảng để nắm vững các nguyên tắc phát triển Spring và Clean Code. Quá trình phát triển của ứng dụng Spring từ mô hình hóa domain đến MSA và khả năng quan sát (observability) được gói gọn trong 7 bài giảng. (
Xem lộ trình>>)


Nâng cao năng lực 2. Khả năng thiết kế mã nguồn


Clean Spring vì mã nguồn bền vững

Trong suốt quá trình này, nguyên tắc mà chúng ta lấy làm trọng tâm chính là Clean Spring.

Clean Spring là chiến lược thực tế áp dụng các nguyên tắc của 'Clean Code' vào việc phát triển Spring. Mục tiêu không chỉ đơn thuần là mã nguồn dễ nhìn, mà là nâng cao năng suất của nhóm cùng với chất lượng mã nguồn về lâu dài. Triết lý cốt lõi đó được thể hiện rõ qua câu nói của Kent Beck: "Mã sạch hoạt động được (Clean Code That Works)".

Khả năng bảo trì và năng suất là tiền đề của nhau. Chỉ khi mã nguồn dễ thay đổi thì việc bảo trì mới dễ dàng, và chỉ khi có thể thay đổi nhanh chóng thì năng suất mới tăng lên. Để tạo ra cấu trúc này, việc tái cấu trúc (refactoring) là thiết yếu, và tiền đề của nó chính là mã kiểm thử (test code).

Và khi đã nắm vững tiêu chuẩn này, việc phải chỉ thị cho AI cái gì và như thế nào cũng mới trở nên rõ ràng.

Clean Spring của Toby, chủ đề đầu tiên

Mô hình miền và
Kiến trúc Hexagonal

Bắt đầu phát triển Clean Spring là việc hiểu sâu sắc về vấn đề (domain) mà dịch vụ đang cố gắng giải quyết. Và chiến lược cốt lõi để phản ánh điều này vào mã nguồn, đồng thời thiết kế sao cho hệ thống có thể phát triển ổn định ngay cả khi mở rộng tính năng, chính là Domain Model Pattern và kiến trúc lục giác (hexagonal-architecture).

Trong khóa học này, chúng ta sẽ áp dụng thực tế mô hình domain và kiến trúc hexagonal dựa trên các công nghệ Spring, Web, JPA mới nhất, đồng thời cùng nhau giải quyết những trăn trở cốt lõi trong giai đoạn đầu của dự án thực tế như thiết lập cấu trúc dự án, phân tách module, phương thức hợp tác và chiến lược kiểm thử. Trong quá trình này, bạn có thể trải nghiệm luồng phát triển và cấu trúc lại (refactoring) mô hình domain.

<Mô hình Domain và Kiến trúc Hexagonal> bao gồm hai phần bài giảng là part1 và part2.


Phần 1. Tập trung vào chức năng thành viên, xây dựng khung mô hình miền và kiến trúc, đồng thời thực hành thiết kế logic cốt lõi, cấu trúc hóa và phương pháp phát triển dựa trên mã kiểm thử. (Xem Phần 1 >)

Phần 2. Xử lý các yêu cầu phức tạp và thiết kế lại mô hình, đồng thời áp dụng các kỹ thuật thiết kế chuyên sâu, các phương pháp tái cấu trúc đa dạng và các công cụ hỗ trợ kiểm thử cần thiết cho thực tế. ✔️ Bài giảng này


Mô hình Domain và Kiến trúc Hexagonal phần 2

Nội dung học tập

Phản hồi Part 1 và Tái cấu trúc thiết kế

Chúng tôi xem xét lại thiết kế hiện tại dựa trên các phản hồi và câu hỏi từ những người đã tham gia Part 1. Chúng tôi sẽ chỉ ra ý nghĩa chính xác của việc đánh đổi trong thiết kế (trade-off), và thực hiện thay đổi thiết kế để tách biệt các đối tượng giá trị miền (Domain Value Object) và DTO ứng dụng bằng phương pháp tái cấu trúc mã nguồn (refactoring) dần dần và an toàn theo cách của Martin Fowler. Bạn có thể rèn luyện kỹ năng thực hiện refactoring trong khi vẫn luôn duy trì trạng thái các bài kiểm tra (test) thành công.

Thiết kế cổng Hexagonal thể hiện ý định giao tiếp

Port là nơi ghi lại ý định tương tác của ứng dụng với thế giới bên ngoài. Thay vì dồn tất cả các phương thức vào một giao diện dịch vụ khổng lồ duy nhất, phương pháp cấu trúc port theo đơn vị ý định giao tiếp dựa trên Nguyên tắc phân tách giao diện (ISP) sẽ được thực hành thông qua việc phát triển port xác thực thành viên. Chúng ta cũng sẽ đề cập đến cách viết các bài kiểm tra port dựa trên giao diện để chúng không bị phá vỡ ngay cả khi tái cấu trúc (refactoring) và cách cụ thể hóa các quy ước thiết kế của nhóm thành tài liệu hướng dẫn phát triển.

Component ứng dụng - Cấu trúc bên trong của Hexagonal

Kiến trúc Hexagonal không đưa ra câu trả lời về việc cấu trúc bên trong nên được tổ chức như thế nào. Trong khóa học này, chúng tôi mượn khái niệm thành phần UML và đề xuất chiến lược thiết kế một Aggregate và các Application Service xung quanh nó thành một đơn vị mô-đun độc lập và có thể thay thế được gọi là Application Component. Chúng ta sẽ thiết lập các nguyên tắc thực tế như tham chiếu trực tiếp và tham chiếu định danh giữa các Aggregate, giới hạn đơn vị thay đổi, quan hệ phụ thuộc một chiều giữa các thành phần, và lần lượt hoàn thiện bốn thành phần: Giảng viên, Khóa học, Đăng ký và Chương trình giảng dạy.

Cải thiện kiểm thử và xác thực kiến trúc

Các nguyên tắc kiến trúc phải được bắt buộc thực hiện bằng mã kiểm thử chứ không phải bằng sự chú ý của con người. Bạn sẽ học cách thể hiện ý đồ kiến trúc trong mã nguồn bằng các annotation tổng hợp stereotype tùy chỉnh, và cách sử dụng ArchUnit để tự động xác thực các quy tắc kiến trúc của nhóm tại thời điểm build, chẳng hạn như cấm phụ thuộc vòng giữa các slice hoặc ngăn chặn việc thay đổi trạng thái của các aggregate khác. Ngoài ra, bạn cũng sẽ thực hành các kỹ thuật để nâng cao chất lượng và hiệu quả viết mã kiểm thử bằng cách sử dụng dữ liệu kiểm thử ngẫu nhiên với Instancio, cùng với test fixture và base class.

Thiết kế Aggregate cho các Domain phức tạp và TDD

Chúng ta sẽ mô hình hóa quá trình chuyển đổi trạng thái cho vòng đời của bài giảng (Course) (Bản thảo - Kiểm duyệt - Công khai - Lưu trữ), đồng thời thiết lập tiêu chuẩn sử dụng cho Natural ID phức hợp, Exception và Optional trong việc đăng ký học (Enrollment). Trong thành phần chương trình học cuối cùng, bạn sẽ trải nghiệm quá trình khám phá ngôn ngữ chung (Ubiquitous Language) để giải quyết vấn đề ranh giới Aggregate, và phát triển các logic domain dựa trên collection phức tạp như thêm, di chuyển, xóa các Section và Lesson bằng TDD. Hơn nữa, chúng ta sẽ sử dụng @OrderColumn và @EntityGraph để duy trì Aggregate một cách hiệu quả, đồng thời kiểm chứng số lượng truy vấn thực thi bằng Hibernate Statistics để xử lý vấn đề N+1.

Giải quyết vấn đề quan hệ phụ thuộc giữa các thành phần bằng DIP

Khi số lượng các thành phần tăng lên, sự cám dỗ về phụ thuộc vòng sẽ xuất hiện. Việc chỉ phụ thuộc vào interface là chưa đủ, chúng ta sẽ cùng xác nhận rằng phải đảo ngược cả quyền sở hữu interface thì mới thực sự là đảo ngược phụ thuộc (DIP) thông qua việc giải quyết vấn đề phụ thuộc hai chiều giữa khóa học và chương trình giảng dạy. Bạn cũng sẽ hiểu được thực tế rằng required port trong kiến trúc Hexagonal chính là một ví dụ áp dụng của DIP.

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

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

  • Những người đã học xong Clean Spring Phần 1 và muốn hoàn thiện việc triển khai thực tế cho các domain còn lại.

  • Những ai đang thắc mắc về cách áp dụng mô hình Domain Model Pattern và kiến trúc Hexagonal vào các domain phức tạp ở cấp độ thực tế.

  • Những nhà phát triển cảm thấy bối rối không biết nên chia và tổ chức cấu trúc bên trong như thế nào khi ứng dụng ngày càng lớn dần.

  • Những người đang tìm kiếm cách viết test nhanh chóng và hiệu quả vì cảm thấy việc tạo test đang làm chậm quá trình phát triển.

  • Nhà phát triển muốn kiểm chứng và tuân thủ các quy tắc kiến trúc bằng mã nguồn thay vì chỉ tồn tại trên tài liệu rồi bị phá vỡ.

  • Nhà phát triển muốn trang bị năng lực thiết kế để có thể hiểu và đánh giá mã nguồn do các đại lý lập trình AI tạo ra.

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

  • Ngôn ngữ Java - JDK21

  • Thấu hiểu các nguyên lý cơ bản của Spring

  • Kinh nghiệm phát triển ứng dụng sử dụng Web API và JPA bằng Spring Boot

Xin chào
Đây là tobyilee

Xác minh Inflearn

16,212

Học viên

1,109

Đánh giá

427

Trả lời

5.0

Xếp hạng

9

Các khóa học

Tôi là một nhà phát triển phần mềm đang sống tại Úc. Tôi đã có 30 năm kinh nghiệm phát triển các hệ thống và dịch vụ trong nhiều lĩnh vực khác nhau.

Tôi yêu thích Spring Framework cùng các công nghệ liên quan và chủ yếu sử dụng các ngôn ngữ dựa trên JVM.

Tôi đã thành lập và hoạt động trong Nhóm người dùng Spring Hàn Quốc (KSUG), đồng thời cũng là tác giả của cuốn sách mang tên Toby's Spring.

Tôi thích trò chuyện về nhiều chủ đề khác nhau liên quan đến phát triển phần mềm.

Tôi đã thành lập và hoạt động trong Cộng đồng người dùng Spring Hàn Quốc (KSUG), đồng thời cũng là tác giả của cuốn sách mang tên "Toby's Spring". Tôi thích trò chuyện về nhiều chủ đề đa dạng liên quan đến phát triển phần mềm.

Tôi đã thành lập và hoạt động trong Cộng đồng người dùng Spring Hàn Quốc (KSUG), đồng thời cũng là tác giả của cuốn sách "Toby's Spring". Tôi thích trò chuyện về nhiều chủ đề đa dạng liên quan đến phát triển phần mềm.

Thêm

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

Tất cả

48 bài giảng ∙ (12giờ 58phú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á

  • geminikims님의 프로필 이미지
    geminikims

    Đánh giá 3

    Đánh giá trung bình 5.0

    5

    33% đã tham gia

    Đây thực sự là một bài giảng cần thiết ngay cả trong thời đại mà AI có thể viết code thay cho con người! Đây là một khóa học hoàn toàn xứng đáng với số tiền bỏ ra, vì bạn có thể "đánh cắp" được luồng tư duy cũng như quan điểm của thầy Toby về việc triển khai, tái cấu trúc (refactoring), mã kiểm thử (test code) và cách thầy triển khai các suy nghĩ về phát triển phần mềm. Đặc biệt, phần tổng kết ở bài học cuối cùng còn chứa đựng những hiểu biết sâu sắc (insight) của thầy Toby về thời đại hiện nay, giúp tôi cảm nhận được rằng con người vẫn cần phải nghiên cứu, học hỏi và rèn luyện nhiều hơn nữa. Vượt ra ngoài chủ đề chính của bài giảng, tôi thực sự khuyên dùng khóa học này cho bất kỳ nhà phát triển nào, bất kể số năm kinh nghiệm!

    • zin님의 프로필 이미지
      zin

      Đánh giá 3

      Đánh giá trung bình 5.0

      5

      100% đã tham gia

      Trong kỷ nguyên AI, Clean Spring sẽ trở thành người dẫn đường, chỉ ra loại "harness" (khung kiểm soát) nào cần được cung cấp cho AI. Đó là bởi vì chúng ta cần cung cấp một môi trường nơi nhà phát triển có thể tin tưởng vào AI để lập trình, thông qua các tài liệu mô hình domain, hướng dẫn phát triển và kiểm thử kiến trúc. Với ý nghĩa đó, tôi nghĩ rằng Clean Spring 1 Part 2 lần này có thể giúp bạn hoặc đội ngũ phát triển đi đúng hướng như mong đợi. Bài giảng lần này cũng rất thú vị. 😊 Hy vọng sẽ có nhiều nhà phát triển tham gia khóa học này!

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

      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!

      Ưu đãi có thời hạn

      54 ₫

      30%

      2.082.165 ₫