Methodology, Tản mạn

Domain Drive Development (DDD) – First thought – Part 3

phần trước, chúng đa đã tìm hiểu về việc sử dụng Ubiquituous Language trong quá trình trao đổi qua lại giữa các software specialists và domain experts để tạo ra model. Ở phần này, mình xin đề cập đến 1 số điểm cần lưu ý trong việc thiết kế model trong khâu design và lựa chọn ngôn ngữ cho khâu implementation.

26697126-flat-design-concept-of-process-web-page-coding-and-programming-Stock-Vector

Thiết kế model

Đầu tiên xét đến việc chuyển tải requirement thành design. Một kỹ thuật design thường thấy được gọi là analysis model được thực hiện bởi các designer hay còn gọi là software analyst. Họ làm việc phân tích requirement từ khách hàng và tạo ra các design document mà không care đến việc hiện thực nó như thế nào xét về góc độ kỹ thuật. Khi design đến tay developer để code thì sẽ có nhiều chuyện xảy ra như các rào cản kỹ thuật, các nguyên lý lập trình không cho phép hiện thực hóa design theo cách mà designer mong muốn, hoặc là design không thể cover hết tất cả các trường hợp cần thiết có thể dẫn đến việc developer sẽ tự code mà không theo design. Sau một thời gian, design document sẽ bị out-dated, và khi đó kết quả phân tích từ designer hoàn toàn bị lãng quên. Một vấn đề quan trọng nữa là, kiến thức nghiệp vụ đi từ khách hàng qua designer để truyền tải vào design document và cuối cùng đến tay developer có thể dễ dàng gặp tình trạng “tam sao thất bản”, dẫn đến bản chất của vấn đề có thể bị thay đổi.

Vì vậy, để giải quyết tình trạng trên, team developer sẽ “cài” người vào team design: Thứ nhất sẽ giúp cho team có cái nhìn toàn cảnh và thật nhất với yêu cầu của khách hàng, điều đó sẽ giúp cho họ tạo ra những model có ý nghĩa. Thứ hai, team sẽ có vai trò trong việc góp ý để cân bằng các yêu cầu về mặt nghiệp vụ và kỹ thuật. Và cuối cùng là tạo ra các design có khả năng hiện thực bằng code, tuân theo các nguyên lý về design để bảo đảm software dựng lên phải có khả năng dễ dàng extendable và maintainable. Việc update design và code phải được thực hiện song song và liên tục, tránh tình trạng code chạy trước design.

Lựa chọn ngôn ngữ

Việc implement model đòi hỏi các công cụ và ngôn ngữ lập trình có khả năng support tốt việc modelling. Object-oriented programming language ngoài khả năng modelling các đối tượng ngoài thực tế vào trong code một cách hoàn hảo, cộng với khả năng re-usable và extendable được xem là best choice.
Có hàng tá các design principles + design patterns + practices dành riêng cho OOP sẽ giúp ích rất nhiều cho developer trong việc xây dựng ứng dụng. Việc xây dựng 1 hệ thống với structure vững chãi, rõ ràng và linh hoạt trong việc thay đổi sẽ giúp cho việc đồng bộ hóa design và implementation.
Ngược lại, việc sử dụng không thuần thục các nguyên lý lập trình OOP hoặc sử dụng một ngôn ngữ trong họ programming paradigms khác như procedural programming hay functional programming sẽ là một bất lợi.

edwardthienhoang.

Advertisements

3 thoughts on “Domain Drive Development (DDD) – First thought – Part 3”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s