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.
