Lú não cũng Domain-Driven Design(DDD), Clean Architecture, Data-Driven Design 😵‍💫😵‍💫

1. DOMAIN-DRIVEN DESIGN

Domain Driven Design được hiểu là phong cách thiết kế hướng vào nghiệp vụ. Ở đây theo mình hiểu DDD sẽ bắt đầu bằng cách xác định miền(domain) hoặc còn gọi là nghiệp vụ. Ví dụ nghiệp vụ tài chính, nghiệp vụ ngân hàng.... Trong ví dụ về hệ thống quản lý thư viện thì Domain chính là tất cả bên trong thư viện và những thứ gì liên quan đến nó, các bạn sẽ nghĩ ngay đến sách chính là đối tượng cốt lõi, Người đọc là người sử dụng thư viện và các hành động như mượn, trả sách... Tất cả những cái này sẽ được quy vào Domain. Lưu ý đó là chúng ta hiểu Domain không chỉ giới hạn ở mặt dữ liệu mà nó còn bao gồm các quy tắc nghiệp vụ, quy tắc kinh doanh liên quan như "một độc giả không thể mượn quá 5 sách cùng một lúc" hoặc "sách phải được trả lại trong vòng 2 tuần". vì nó chứa rất nhiều quy tắc, nghiệp vụ ở đây nên ở bước thiết kế này sẽ có các chuyên gia trong lĩnh vực tham gia cùng. Khá phức tạp với mình nên mình cũng chưa follow theo hướng design này hiện tại.

2. CLEAN ARCHITECTURE

Clean Architecture là cái mô? Nó là 1 kiến trúc phần mềm khác với phong cách thiết kế nha. Clean Architecture tập trung vào việc code thành các layer ở mức độ thư mục(project), nó chia phần mềm thành các lớp(tầng) với core là các Entities (các business objects), tiếp theo Use Cases (logic nghiệp vụ), tiếp theo sẽ là cái Interface Adapters (giao tiếp với bên ngoài). Nếu các bạn search trên mạng sẽ có rất nhiều hình ảnh hình tròn mà nó rất chi là lung tung, ý tưởng cốt lõi của kiến trúc này nó những gì mình đã nói ở trên. Nếu các bạn thấy có hình ảnh nào vẽ khác đi là cái họ định nghĩa lại tên hoặc kết hợp với những phong cách thiết kế khác như DDD. (Mình thấy bên nước ngoài họ rất chuộng DDD)

3. TRIỂN KHAI CLEAN ARCHITECTURE VÀ DATA DRIVEN DESIGN

Trong cái dự án mình đang làm mình cũng sử dụng Clean Architecture và định nghĩa tên các project theo chuẩn chung, tầng đầu tiên sẽ là domain chứa các entities , tiếp theo là Tầng Application (chứa các logic nghiệp vụ chính), 2 tầng ở ngoài cùng là Presentation(api tương tác với web, mobile) và Infrastructure(giao tiếp DB, mail...). Định nghĩa được tới đây là mình đã áp dụng clean Architecture cho phần mềm ở mức độ thư mục, nhưng mình không áp dụng Domain Driven Design cho dự án mà mình thiết kế theo Data Driven Design. Đây là phong cách thiết kế trước giờ mình sử dụng nhưng mặc nhiên k hiểu nó là gì? Mình nghĩ là mô hình 3 layer hoặc N-tier, nhưng 3 layer nó cũng là kiến trúc ở mức độ phân chia layer thư mục. Còn luồng thiết kế sẽ là Data Driven Design. Ví dụ với đề bài quản lý thư viện ta liền nghĩ tới các đối tượng dữ liệu Book, Customer, Admin... rồi sẽ thiết kế DB dựa trên các đối tượng dữ liệu đó, ở các tầng cao hơn ta mới xử lý các nghiệp vụ.

Chia sẻ cho các bạn những khái niệm làm mình rối bời rất lâu mới có thể thoát ra được. Có thể những gì mình hiểu và giới thiệu ở đây sẽ k phải 100% vì mình thấy họ còn đang đấm đá nhau rất nhiều về cái kiến trúc phần mềm này. Hy vọng đây sẽ là 1 tài liệu tham khảo giúp các bạn trên con đường sắp tới.

#hocduthu #nguyenviethung

Đăng nhận xét

Mới hơn Cũ hơn

Biểu mẫu liên hệ