Home » Company » Using ubiquitous language to make better software

Using ubiquitous language to make better software

Domain Driven Design - ubiquitous-language

Abstract: “Ubiquitous Language” is a term used in Domain Driven Design (DDD), coined by Eric Evans to clear communication hurdle between developers and users. The point is to create a language that make everyone on the same page.

Ubiquitous Language là gì?

“Ubiquitous languange” được hiểu là thứ ngôn ngữ “phổ biến ở khắp ơi”. Theo đó, ai cũng dùng và hiểu được. Hơn nữa, với ngôn ngữ ubiquitous, mọi người đều có cách hiểu giống nhau với dùng một diễn đạt.

Uniquitous Language là “ngôn ngữ nói chung”

Với cùng một yêu cầu về phần mềm hay hệ thống, tuỳ thuộc vào vị trí hay xuất thân mà mỗi thành viên trong một dự án có cách hiểu rất khác nhau. Một số ví dụ cụ thể là:
  1. Người làm kỹ thuật hiểu khác “dân” kinh doanh,
  2. Người dùng cuối có cách trải nghiệm phần mềm rất khác so với lập trình viên.
Để xoá mờ hơn sự khác biệt đó, việc sử dụng Ubiquitous Language được đề cập và áp dụng trong DDD.

Ubiquitous Language là một trong bốn định nghĩa cốt lõi của DDD (theo Wikipedia):

Domain (lĩnh vực (chuyên môn)): “A sphere of knowledge (ontology), influence, or activity. The subject area to which the user applies a program is the domain of the software.”

Model (Mô hình): “A system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain.”

Ubiquitous Language (Ngôn ngữ chung): “A language structured around the domain model and used by all team members to connect all the activities of the team with the software.”

Context (ngữ cảnh): “The setting in which a word or statement appears that determines its meaning.”

Diễn đạt dễ hiểu hơn

Một phần mềm được xây dựng để giải quyết một bài toán trong lĩnh vực cụ thể theo một mô hình nào đó. Điều đó đúng trong những bối cảnh cụ thể. Việc mô hình hoá giúp thành viên dự án hiểu trực quan hơn về hệ thống. Thông qua việc sử dụng một ngôn ngữ chung, các thành viên dự án hiểu đúng, giống nhau về phần mềm này. Thông thường, các thuật ngữ có một cách hiểu rõ hơn, hoặc duy nhất trong một ngữ cảnh cụ thể.

Các vai trong một dự án rất khác nhau

Các vai thường thấy trong một dự án phát triển phần mềm là:
  1. Domain expert,
  2. Analyst,
  3. Developer.
Hiển nhiên, cùng một sự vật, hiện tượng, các vai này có thể hiểu rất khác nhau. “Thày bói xem voi” là một câu chuyện vui mô tả một khía cạnh của vấn đề này. Để hiểu giống nhau (chứ không phải hiểu đúng) là mục đích của của việc sử dụng ngôn ngữ chung. Để mọi vai này hiểu tổng thể giống nhau vượt ngoài phạm vi mà “ngôn ngữ chung” có thể làm. (sẽ được đề cập trong một dịp khác)

Đối tượng (chính xác hơn, cấu hình: configuration) được tương tác trong dự án

  1. Mã nguồn,
  2. Test code,
  3. Yêu cầu công việc, tài liệu.
Trên đây là một số đối tượng cần quản lý trong dự án.

Các thành viên trong dự án quản lý cần dùng duy nhất một loại diễn tả mà mọi thành viên đều đồng ý với các thuật ngữ, các hạng mục cụ thể, không có bất kỳ sự không rõ ràng nào. Làm được điều này, chúng ta tiết kiệm được công “phiên dịch” với điểm hình là khoảng cách giữa developer và người dùng cuối.

Một số chú ý

Đồng âm dị nghĩa

“Account”, “configuration” được hiểu khác nhau trong ngành nghề khác nhau.

Với những từ này, cần định nghĩa rõ để tránh hiểu lầm.

Cùng khái niệm, khác cách dùng

Việc tồn tại ba đối tượng có nội dung giống hay tương tự nhau như “người mua”, “người bán”, “tài khoản” là biểu hiện của việc chưa phân loại (taxonomy) chính xác.

Khái niệm thay đổi khi ngữ cảnh/hệ thống mở rộng

Trong giai đoạn đầu của dự án, khi ngữ cảnh chỉ có một, thuật ngữ chỉ có một cách hiểu. Khi dự án phình to, hệ thống thay đổi hay mở rộng, tổ chức thay đổi… dẫn tới sự xuất hiện của nhiều đối tượng và ngữ cảnh khác nhau. Khi đó, cần định nghĩa lại ngôn ngữ, phổ biến đó cho người mới và cũ.

Ví dụ điển hình

Từ “service” (dịch vụ) có khá nhiều nghĩa và được hiểu khác nhau tuỳ vào background của người sử dụng nó, phụ thuộc ngữ cảnh hẹp hay rộng. Xét từ này trong dự án xây dựng website thương mại điện tử
  1. Product manager hiểu đây là “dịch vụ” mà website cung cấp cho người mua hàng,
  2. Các product managers phụ trách các module hay “sản phẩm” khác nhau hiểu “dịch vụ” theo cách khác nhau như “dịch vụ đổi trả hàng”, “dịch vụ chăm sóc khách hàng”,
  3. Kỹ sư thiết kế phần mềm hiểu “Service” là một layer trong mô hình MVC,
  4. Hay một kỹ sư khác, phụ trách một module khác lại hiểu đây là một “API service” cung cấp cho các bên thứ ba cần kết nối vào hệ thống,
  5. Người vận hành hệ thống hiểu cả hệ thống là một “dịch vụ” như trong ITSM (Information Technology Service Management)

Tiểu kết

Đơn giản, ngắn gọn, trong sáng là những yếu tố cần thiết để có được giao tiếp hiệu qủa. “Ngôn ngữ” trong “Ubiquitous Language” là một phương thức để giao tiếp. Mục đích của việc sử dụng “Ubiquitous Language” như là một ngôn ngữ chung với trọng tâm là cả kỹ thuật và nghiệp vụ kinh doanh là một nhu cầu nhãn tiền của người làm nghề IT.