Thiết kế hướng tên miền (DDD) là gì? [đóng cửa]


276

Tôi liên tục thấy DDD (Thiết kế hướng tên miền) được sử dụng rất nhiều trong các bài viết - Tôi đã đọc mục Wikipedia về DDD nhưng vẫn không thể hiểu nó thực sự là gì và tôi sẽ triển khai nó như thế nào trong việc tạo trang web của mình?

Câu trả lời:


595

Thứ nhất, nếu bạn không biết rằng bạn cần nó thì có thể là bạn không cần nó. Nếu bạn không nhận ra những vấn đề mà DDD giải quyết thì có lẽ bạn không gặp phải những vấn đề đó. Ngay cả những người ủng hộ DDD sẽ thường xuyên chỉ ra rằng DDD chỉ dành cho các dự án lớn (> 6 tháng).

Giả sử rằng bạn vẫn đang đọc vào thời điểm này, tôi nhận DDD là thế này:

DDD là về việc cố gắng biến phần mềm của bạn thành một mô hình của một hệ thống hoặc quy trình trong thế giới thực. Khi sử dụng DDD, bạn phải làm việc chặt chẽ với một chuyên gia tên miền , người có thể giải thích cách hệ thống trong thế giới thực hoạt động. Ví dụ: nếu bạn đang phát triển một hệ thống xử lý việc đặt cược vào các cuộc đua ngựa, chuyên gia tên miền của bạn có thể là một người cá cược có kinh nghiệm.

Giữa bản thân và chuyên gia tên miền, bạn xây dựng một ngôn ngữ có mặt khắp nơi (UL), về cơ bản là một mô tả khái niệm về hệ thống. Ý tưởng là bạn sẽ có thể viết ra những gì hệ thống làm theo cách mà chuyên gia tên miền có thể đọc nó và xác minh rằng nó là chính xác. Trong ví dụ cá cược của chúng tôi, ngôn ngữ phổ biến sẽ bao gồm định nghĩa của các từ như 'chủng tộc', 'đặt cược', 'tỷ lệ cược', v.v.

Các khái niệm được mô tả bởi UL sẽ tạo thành cơ sở cho thiết kế hướng đối tượng của bạn. DDD cung cấp một số hướng dẫn rõ ràng về cách các đối tượng của bạn sẽ tương tác và giúp bạn chia các đối tượng của mình thành các loại sau:

  • Các đối tượng giá trị, đại diện cho một giá trị có thể có các phần phụ (ví dụ: một ngày có thể có một ngày, tháng và năm)
  • Các thực thể, là các đối tượng có bản sắc . Ví dụ: mỗi đối tượng Khách hàng có danh tính riêng, vì vậy chúng tôi biết rằng hai khách hàng có cùng tên không phải là cùng một khách hàng
  • Rễ tổng hợp là các đối tượng sở hữu các đối tượng khác. Đây là một khái niệm phức tạp và hoạt động trên cơ sở rằng có một số đối tượng không có ý nghĩa trừ khi họ có chủ sở hữu. Ví dụ: một đối tượng 'Dòng đơn hàng' không có ý nghĩa nếu không có 'Đơn hàng', vì vậy chúng tôi nói rằng Đơn hàng là gốc tổng hợp và các đối tượng Dòng đơn hàng chỉ có thể được thao tác thông qua các phương thức trong đối tượng Đơn hàng

DDD cũng đề xuất một số mẫu:

  • Kho lưu trữ , một mẫu cho sự kiên trì (lưu và tải dữ liệu của bạn, thường là đến / từ cơ sở dữ liệu)
  • Nhà máy , một mô hình để tạo đối tượng
  • Dịch vụ, một mẫu để tạo các đối tượng thao túng các đối tượng miền chính của bạn mà không phải là một phần của chính miền

Bây giờ, tại thời điểm này tôi phải nói rằng nếu bạn chưa từng nghe về bất kỳ điều nào trong số này trước đây, thì bạn không nên cố gắng sử dụng DDD cho bất kỳ dự án nào mà bạn có thời hạn. Trước khi thử DDD, bạn nên làm quen với các mẫu thiết kếmẫu thiết kế doanh nghiệp . Biết những điều này làm cho DDD dễ dàng hơn rất nhiều để nắm bắt. Và, như đã đề cập ở trên, có một phần giới thiệu miễn phí về DDD có sẵn từ InfoQ (nơi bạn cũng có thể tìm thấy các cuộc nói chuyện về DDD).


33
Wow ... Thật là một câu trả lời tuyệt vời! Rất đánh giá cao và lời giải thích tốt nhất tôi đã đọc bất cứ nơi nào một dặm. Cảm ơn .. Tôi sẽ tải cuốn sách đó vào ngày mai.
leen3o

3
"Rễ tổng hợp là những đối tượng sở hữu các đối tượng khác. Đây là một khái niệm phức tạp và hoạt động trên cơ sở rằng có một số đối tượng không có ý nghĩa trừ khi chúng có chủ sở hữu." Tôi nghĩ đó có thể là quan niệm sai lầm ở đây, ý tưởng bạn đề cập ở đây là "Toàn bộ giá trị", trong khi Tổng hợp quan tâm nhiều hơn đến Ranh giới giao dịch, trong đó tất cả các quy tắc bất biến kinh doanh cần phải được thực thi tại đây.
super1ha1

6
Thành thật mà nói, điều này nghe có vẻ giống như mọi dự án nơi các nhà phát triển hợp tác với các kiến ​​trúc sư trong hơn một tháng. (Vâng, theo kinh nghiệm của tôi ít nhất.) Nhận thức nào khiến tôi đánh giá cao câu trả lời của bạn hơn nữa. :)
Jaroslav Záruba ngày

4
Tôi không đồng ý với tuyên bố rằng DDD là "chỉ dành cho các dự án lớn". DDD là không có gì bạn phải làm đầy đủ hoặc không làm gì cả. Bạn chỉ có thể thực hiện một số thực hành từ DDD. Ví dụ: bạn chỉ có thể thực hiện "Đối tượng giá trị" và "ngôn ngữ phổ biến" và không thực hiện các gốc tổng hợp trong một dự án nhỏ.
EasterBunnyBugSmasher

6
Nhân tiện, chúng tôi không phân tích tên miền cho mọi dự án chúng tôi làm hoặc mô hình hóa. Không phải chúng ta đã không bao giờ kết thúc cuộc trò chuyện với tư cách là BA với khách hàng và doanh nghiệp vừa và nhỏ để hiểu phạm vi và phạm vi dự án? Tôi vẫn không hiểu những gì nổi bật đặc biệt trong DDD sau đó có dự án phát triển phần mềm nào khác không?
siêu tân tinh

50

Lấy StackOverflow làm ví dụ. Thay vì bắt đầu thiết kế một số biểu mẫu web, trước tiên bạn tập trung vào việc lập mô hình hướng đối tượng của các thực thể trong miền vấn đề của bạn, ví dụ: Người dùng, Câu hỏi, Câu trả lời, Phiếu bầu, Nhận xét, v.v. Vì thiết kế được điều khiển bởi các chi tiết của vấn đề tên miền được gọi là thiết kế hướng tên miền .

Bạn có thể đọc thêm trong cuốn sách của Eric Evans .


5
Có một phiên bản ngắn của cuốn sách của Eric Evans có sẵn miễn phí .
troelskn

Vấn đề là bạn cần một người hiểu tên miền theo cách đủ để họ có thể nói điều gì đó hữu ích trước khi họ buộc bằng cách sử dụng các trang web! Khi đây là trường hợp tuyệt vời!
Ian Ringrose

3
Nhưng ai sẽ bắt đầu bằng cách thiết kế các hình thức, trung thực? Bất kỳ khóa học đáng kính nào cũng sẽ trải qua các ứng dụng phân tích, thiết kế và mô hình hóa theo yêu cầu kinh doanh. Tôi chỉ không nhận được những gì mới với kỹ thuật này.
Sabas

6
Tôi cũng vậy, đây đơn giản là một Thiết kế hướng đối tượng, được mọi người sử dụng ngay cả trước khi khái niệm này xuất hiện. Tôi không thấy bất kỳ phát minh mới nào ở đây.
Ronen Festinger

2
@RonenFestinger vui lòng không phán xét DDD chỉ bằng câu trả lời này. Có rất nhiều hiểu biết trong cuốn sách của Eric Evans. Ví dụ bối cảnh giới hạn. Mô hình bối cảnh giới hạn là một trong những trụ cột của microservice mà chúng ta đang xây dựng ngày nay. Đọc cuốn sách cũng giúp bạn hiểu được microservice.
Kerem Baydoğan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.