Domain driven design được tác giả Eric Van đưa ra sau kinh nghiệm khoảng 20 năm tham gia phát triển phần mềm, xây dựng những ứng dụng lớn cho giới tài chính, ngân hàng, bảo hiểm, giao vận quốc tế.
1. Domain Driven Design là gì
DDD là cách tiếp cận mới trong việc phát triển phần mềm với nghiệp vụ phức tạp ví dụ như làm phần mềm cho các tổ chức lớn như ngân hàng hoặc tài chính. Cốt lõi chủ yếu của DDD là tập trung vào domain hay được hiểu là busines nên các dự án:
- Có nghiệp vụ và logic phức tạp
- Cần mô hình hoá các nghiệp vụ đấy vào trong code
- Tăng cường sự hợp tác giữa nhóm phát triển và domain expert ( là người nắm rõ về nghiệp vụ)
Vậy như thế nào thì là các dự án có nghiệp vụ phức tạp thì trước tiên chúng ta cần phải hiểu rõ domain là gì
2. Domain là gì
Mỗi tổ chức hoặc một cá nhân trên thế giới thì được gọi là domain. Vì mỗi một tổ chức và cá nhân thì sẽ có phương thức hoạt động khác nhau, được cấu trúc một cách riêng biệt, không cấu trúc nào là giống nhau hoàn toàn kể cả công ty hoặc tổ chức đấy có làm chung một lĩnh vực. Do đó trong phần mềm chúng ta có thể hiểu rằng nó Domain chính là các nghiệp vụ, cách tổ chức hoặc các phương thức hoạt động của một tổ chức.
Mỗi tổ chức sẽ được chia thành các bộ phận khác nhau và chức năng cũng như cách thức hoạt động của nó cũng hoàn toàn khác nhau nên chúng ta có thể hiểu rằng nó sẽ được cấu thành bởi nhiều domain
3. Sub Domain là gì
Trong mỗi phòng ban hoặc bộ phận thì nó lại được chia nhỏ ra thành các domain hoặc nghiệp vụ khác nhau nên chúng ta có thể hiểu rằng trong một domain lớn thì nó sẽ có nhiều các subdomain hoặc các domain nhỏ.
4. Khi nào chúng ta dùng DDD trong dự án ?
Khi chúng ta bắt đầu một dự án thì chúng ta nên xem xét xem dự án đấy về cái gì, nó có nghiệp vụ phức tạp không ? Nếu ta chỉ cần làm những phần mềm hoặc các trang web tương đối đơn giản, chủ yếu phục vụ cho việc nhập dữ liệu và hiển thị thông tin dữ liệu cho người dùng tức là chủ yếu dùng CRUD thì tốt nhất là bạn nên dùng theo mô hình MVC, và có rất nhiều các framework lớn hiện nay trong hầu hết tất cả các ngôn ngữ đều hỗ trợ mô hình này. Việc phát triển phần mềm nhờ đó cũng hết sức nhanh và đơn giản hơn nhiều khi chúng ta dùng DDD
Nếu bạn cần phát triển cho các dự án phầm mềm như các công cụ quản lý quảng cáo hoặc optimize hiển thị quảng cáo một cách tự động, hay là xây dựng phần mêm quản lý trong ngân hàng thì bạn nên dùng DDD.
Khi làm các phần mềm chuyên biệt như vậy nó đòi hỏi phải hiểu rõ các quy trình, các nghiệp vụ và cách tổ chức của hệ thống thì mới làm được. Mà bản thân hầu hết developer thì sẽ không biết được các nghiệp vụ này nên họ sẽ phải có quá trình học và tìm hiểu nghiệp vụ thông qua một domain expert.
Domain expert ở đây là những người nắm rõ về nghiệp vụ nhưng lại không biết về kỹ thuật. DDD thì rất tốt trong việc giải quyết vấn đề này vì nó tập trung vào domain. Mà Domain thì được xây dựng nên bởi development team và domain expert, do đó nó tránh được các rủi ro khi mà developer hiểu nhầm về nghiệp vụ và thiết kế hệ thống sai và cần đập đi làm lại xây dựng từ đầu.
Thứ hai là những nghiệp vụ cốt lõi thì sẽ không bao giờ thay đổi, thay đổi chủ yếu nó đến từ phần application, phần tương tác với người dùng nên nó cũng giúp cho việc module hoá, tính mở rộng và khả năng maintain cũng tốt hơn cho sau này