Thiết kế hướng tên miền là gì?


198

Ai đó có thể vui lòng giải thích (bằng thuật ngữ ngắn gọn) chính xác thiết kế hướng tên miền là gì? Tôi thấy thuật ngữ này khá nhiều nhưng thực sự không hiểu nó là gì hoặc nó trông như thế nào. Nó khác với thiết kế không định hướng như thế nào?

Ngoài ra, ai đó có thể giải thích một đối tượng tên miền là gì? Làm thế nào để tên miền khác với các đối tượng bình thường?




Điều này có trả lời câu hỏi của bạn không? Thiết kế hướng tên miền (DDD) là gì?
Satpal

Câu trả lời:


112

BIÊN TẬP:

Vì đây có vẻ là kết quả hàng đầu trên Google và câu trả lời của tôi dưới đây là không, vui lòng tham khảo câu trả lời tốt hơn nhiều này:

https://stackoverflow.com/a/1222488/1240557

TRẢ LỜI (không hoàn thành :))

Để tạo ra phần mềm tốt, bạn phải biết phần mềm đó là gì. Bạn không thể tạo ra một hệ thống phần mềm ngân hàng trừ khi bạn hiểu rõ về ngân hàng là gì, người ta phải hiểu về lĩnh vực ngân hàng.

Từ: Thiết kế hướng tên miền của Eric Evans.

Cuốn sách này làm rất tốt công việc mô tả DDD.

Đăng ký để tải về một bản tóm tắt của cuốn sách , hoặc tải về bản tóm tắt trực tiếp .


Phiên bản mini đó là một tài liệu tham khảo tuyệt vời và tôi thấy nó hữu ích ngay cả với một bản sao của toàn văn trên tay. Tôi thường đi đến nó trước và sau đó là văn bản để biết thêm chi tiết.
Kyri Sarantakos

15
Vì vậy, tôi lấy từ câu trả lời "đọc cuốn sách này" rằng không thể tóm tắt DDD chỉ trong một vài đoạn? Làm thế nào một triết lý thiết kế có thể phức tạp như vậy?
Robin Winslow

Tôi sẽ không nói điều đó là không thể, nhưng tôi nghĩ có những nơi tốt hơn để đọc về nó và cuốn sách Eric Evans là nguồn tốt nhất cho nó imo, vậy tại sao lại sao chép nó ở đây?
Mikael Östberg

6
Bạn đọc thân mến: nếu bạn, giống như tôi, đến đây từ kết quả hàng đầu của Google và thất vọng khi thấy câu trả lời được chấp nhận vì vậy, xin lỗi (xin lỗi, Mikael) không sợ, có nhiều lời giải thích thỏa đáng hơn ở đây trên SO: stackoverflow.com/a/1222488 / 1240557
kryger

3
Ở đó, tôi đã cập nhật câu trả lời của mình với liên kết. Đó là một câu trả lời tốt hơn nhiều. Cảm ơn!
Mikael Östberg

41

Domain Driven Design là một quy trình phương pháp và quy trình để phát triển các hệ thống phức tạp với trọng tâm là ánh xạ các hoạt động, nhiệm vụ, sự kiện và dữ liệu trong một miền vấn đề vào các tạo phẩm công nghệ của miền giải pháp.

Trọng tâm của Thiết kế hướng miền là tìm hiểu miền vấn đề để tạo ra một mô hình trừu tượng của miền vấn đề mà sau đó có thể được triển khai trong một bộ công nghệ cụ thể. Domain Driven Design là một phương pháp cung cấp các hướng dẫn về cách phát triển mô hình và phát triển công nghệ này có thể dẫn đến một hệ thống đáp ứng nhu cầu của những người sử dụng nó đồng thời mạnh mẽ khi đối mặt với sự thay đổi trong miền vấn đề.

Phía quy trình của Thiết kế hướng miền liên quan đến sự hợp tác giữa các chuyên gia tên miền, những người biết miền vấn đề và các chuyên gia thiết kế / kiến ​​trúc, những người biết miền giải pháp. Ý tưởng là có một mô hình chia sẻ với ngôn ngữ dùng chung để mọi người từ hai miền khác nhau với hai quan điểm khác nhau thảo luận về giải pháp họ thực sự đang thảo luận về một nền tảng kiến ​​thức được chia sẻ với các khái niệm được chia sẻ.

Việc thiếu hiểu biết về miền vấn đề được chia sẻ giữa những người cần một hệ thống cụ thể và những người đang thiết kế và triển khai hệ thống dường như là một trở ngại cốt lõi cho các dự án thành công. Domain Driven Design là một phương pháp để giải quyết trở ngại này.

Nó là nhiều hơn là có một mô hình đối tượng. Trọng tâm thực sự là về giao tiếp được chia sẻ và cải thiện sự hợp tác để có thể phát hiện ra các nhu cầu thực tế trong miền vấn đề và một giải pháp thích hợp được tạo ra để đáp ứng các nhu cầu đó.

Thiết kế hướng tên miền: Điều tốt và thách thức cung cấp một cái nhìn tổng quan ngắn gọn với nhận xét này:

DDD giúp khám phá kiến ​​trúc cấp cao nhất và thông báo về các cơ chế và động lực của miền mà phần mềm cần sao chép. Cụ thể, điều đó có nghĩa là một phân tích DDD được thực hiện tốt sẽ giảm thiểu sự hiểu lầm giữa các chuyên gia tên miền và kiến ​​trúc sư phần mềm và nó làm giảm số lượng yêu cầu đắt tiền tiếp theo để thay đổi. Bằng cách phân chia độ phức tạp của miền trong các bối cảnh nhỏ hơn, DDD tránh việc buộc các kiến ​​trúc sư dự án thiết kế một mô hình đối tượng cồng kềnh, điều này làm mất rất nhiều thời gian trong việc xử lý các chi tiết triển khai - một phần vì số lượng thực thể phải xử lý thường tăng lên kích thước của bảng trắng phòng hội nghị.

Cũng xem bài viết này Thiết kế hướng cho miền cho kiến ​​trúc dịch vụ cung cấp một ví dụ ngắn. Bài viết cung cấp mô tả hình thu nhỏ sau đây của Thiết kế hướng miền.

Domain Driven Design ủng hộ việc mô hình hóa dựa trên thực tế kinh doanh có liên quan đến các trường hợp sử dụng của chúng tôi. Khi nó ngày càng già đi và mức độ cường điệu giảm xuống, nhiều người trong chúng ta quên rằng phương pháp DDD thực sự giúp hiểu được vấn đề trong tay và thiết kế phần mềm theo hướng hiểu biết chung về giải pháp. Khi xây dựng các ứng dụng, DDD nói về các vấn đề như tên miền và tên miền phụ. Nó mô tả các bước / lĩnh vực độc lập của các vấn đề như bối cảnh bị ràng buộc, nhấn mạnh một ngôn ngữ chung để nói về những vấn đề này và thêm nhiều khái niệm kỹ thuật, như các thực thể, các đối tượng giá trị và các quy tắc gốc tổng hợp để hỗ trợ thực hiện.

Martin Fowler đã viết một số bài báo trong đó đề cập đến Thiết kế hướng miền như một phương pháp luận. Ví dụ, bài viết này, BoundedContext , cung cấp một cái nhìn tổng quan về khái niệm bối cảnh bị ràng buộc từ Phát triển hướng miền.

Trong những ngày còn trẻ, chúng tôi được khuyên nên xây dựng một mô hình thống nhất cho toàn bộ doanh nghiệp, nhưng DDD nhận ra rằng chúng tôi đã học được rằng "tổng thể thống nhất mô hình miền cho một hệ thống lớn sẽ không khả thi hoặc hiệu quả về chi phí" 1 . Vì vậy, thay vào đó DDD chia một hệ thống lớn thành các Bối cảnh bị ràng buộc, mỗi bối cảnh có thể có một mô hình thống nhất - về cơ bản là một cách cấu trúc NhiềuCanonicalModels.


20

Bạn CHỈ CÓ THỂ hiểu thiết kế hướng tên miền bằng cách hiểu trước những gì sau đây là:

Một miền là gì?

Lĩnh vực mà một hệ thống được xây dựng. Quản lý sân bay, bán bảo hiểm, quán cà phê, chuyến bay quỹ đạo, bạn đặt tên cho nó.

Không có gì lạ khi một ứng dụng trải rộng trên nhiều miền khác nhau. Ví dụ: hệ thống bán lẻ trực tuyến có thể hoạt động trong các lĩnh vực vận chuyển (chọn cách thức giao hàng phù hợp, tùy thuộc vào mặt hàng và điểm đến), giá cả (bao gồm các chương trình khuyến mãi và giá cụ thể của người dùng theo, nói, vị trí) và đề xuất (tính toán liên quan sản phẩm theo lịch sử mua hàng).

Một mô hình là gì?

"Một xấp xỉ hữu ích cho vấn đề trong tầm tay." - Gerry Sussman

Một lớp nhân viên không phải là một nhân viên thực sự. Nó mô hình một nhân viên thực sự. Chúng tôi biết rằng mô hình không nắm bắt được mọi thứ về nhân viên thực sự và đó không phải là điểm chính của nó. Nó chỉ có nghĩa là để nắm bắt những gì chúng ta quan tâm đến bối cảnh hiện tại.

Các lĩnh vực khác nhau có thể quan tâm theo những cách khác nhau để mô hình hóa cùng một điều. Ví dụ, bộ phận tiền lương và bộ phận nhân sự có thể mô hình hóa nhân viên theo những cách khác nhau.

Mô hình miền là gì?

Một mô hình cho một tên miền.

Thiết kế hướng tên miền (DDD) là gì?

Đó là một cách tiếp cận phát triển đánh giá sâu sắc mô hình miền và kết nối nó với việc thực hiện. DDD được đặt ra và ban đầu được phát triển bởi Eric Evans.

Lấy từ đây


12

Đây là một bài viết hay mà bạn có thể xem trên Thiết kế hướng tên miền . nếu ứng dụng của bạn là bất cứ điều gì nghiêm trọng hơn so với bài tập đại học. Tiền đề cơ bản là cấu trúc mọi thứ xung quanh các thực thể của bạn và có một mô hình miền mạnh. Phân biệt giữa các dịch vụ cung cấp những thứ liên quan đến cơ sở hạ tầng (như gửi email, lưu trữ dữ liệu bền vững) và các dịch vụ thực sự làm những việc là yêu cầu kinh doanh cốt lõi của bạn.

Mong rằng sẽ giúp.


4

Như trong TDD & BDD, bạn / nhóm tập trung nhiều nhất vào kiểm tra và hành vi của hệ thống hơn là thực thi mã.

Tương tự như vậy khi nhà phân tích hệ thống, chủ sở hữu sản phẩm, nhóm phát triển và tìm hiểu mã - thực thể / lớp, biến, chức năng, quy trình giao diện người dùng giao tiếp bằng cùng một ngôn ngữ, được gọi là Thiết kế hướng miền

DDD là một quá trình suy nghĩ. Khi mô hình hóa thiết kế phần mềm, bạn cần giữ miền / quy trình kinh doanh ở trung tâm của sự chú ý thay vì cấu trúc dữ liệu, luồng dữ liệu, công nghệ, phụ thuộc bên trong và bên ngoài.

Có nhiều cách tiếp cận mô hình tâm thu bằng DDD

  • tìm nguồn cung ứng sự kiện (sử dụng các sự kiện như một nguồn sự thật)
  • Cơ sở dữ liệu quan hệ
  • cơ sở dữ liệu đồ thị
  • sử dụng ngôn ngữ chức năng

Đối tượng miền:

Nói một cách rất ngây thơ, một đối tượng

  • có tên dựa trên quy trình / luồng kinh doanh
  • có toàn quyền kiểm soát trạng thái bên trong của nó tức là phơi bày các phương thức để thao tác trạng thái.
  • luôn luôn thực hiện tất cả các bất biến kinh doanh / quy tắc kinh doanh trong bối cảnh sử dụng nó.
  • tuân theo nguyên tắc trách nhiệm

TDD - Phát triển dựa trên thử nghiệm
Nitin babariya

BDD - Phát triển hướng hành vi
Nitin babariya

DDD - Phát triển theo hướng tên miền
Nitin babariya

DDD -> Thiết kế hướng tên miền ~ Phát triển ~
psaxton

4

DDD (thiết kế hướng miền) là một khái niệm hữu ích để phân tích các yêu cầu của dự án và xử lý sự phức tạp của các yêu cầu này. Trước khi mọi người phân tích các yêu cầu này bằng cách xem xét mối quan hệ giữa các lớp và bảng và trên thực tế thiết kế của chúng dựa trên các bảng cơ sở dữ liệu mối quan hệ nó không cũ nhưng nó có một số vấn đề:

  • Trong các dự án lớn với yêu cầu phức tạp, nó không hữu ích mặc dù đây là một cách thiết kế tuyệt vời cho các dự án nhỏ.

  • Khi bạn giao dịch với không có người kỹ thuật nào mà họ không có, không có khái niệm kỹ thuật, cuộc xung đột này có thể gây ra một số vấn đề lớn trong dự án của chúng tôi.

Vì vậy, DDD xử lý vấn đề đầu tiên khi coi dự án chính là Miền và chia từng phần của dự án này thành các phần nhỏ mà chúng ta nổi tiếng với Bounded Context và mỗi trong số chúng không có bất kỳ ảnh hưởng nào đến các phần khác. Và vấn đề thứ hai đã được giải quyết với một ngôn ngữ phổ biến là ngôn ngữ chung giữa các thành viên nhóm kỹ thuật và chủ sở hữu sản phẩm không có kỹ thuật nhưng có đủ kiến ​​thức về các yêu cầu của họ

Nói chung, định nghĩa đơn giản cho Miền là dự án chính kiếm tiền cho chủ sở hữu và các nhóm khác.


1

Tôi tin rằng pdf sau đây sẽ cho bạn bức tranh lớn hơn. Thiết kế hướng tên miền của Eric Evans

LƯU Ý: Hãy nghĩ về một dự án bạn có thể làm việc, áp dụng những điều nhỏ bạn đã hiểu và xem các thực tiễn tốt nhất. Nó cũng sẽ giúp bạn phát triển khả năng của mình đối với phương pháp thiết kế kiến ​​trúc dịch vụ vi mô.


0

Tôi không muốn lặp lại câu trả lời của người khác, vì vậy, trong ngắn hạn, tôi giải thích một số hiểu lầm phổ biến

  • Tài nguyên thực tế: THỰC TRẠNG, NGUYÊN TẮC VÀ THỰC TIỄN CỦA THIẾT KẾ LÁI XE TẢI CỦA Scott Millett
  • Nó là một phương pháp cho các hệ thống kinh doanh phức tạp. Nó đưa tất cả các vấn đề kỹ thuật ra ngoài khi giao tiếp với các chuyên gia kinh doanh
  • Nó cung cấp một sự hiểu biết sâu rộng về (mô hình đơn giản hóa và chưng cất) của toàn bộ nhóm phát triển.
  • nó giữ cho mô hình kinh doanh đồng bộ với mô hình mã bằng cách sử dụng ngôn ngữ phổ biến (ngôn ngữ được hiểu bởi toàn bộ nhóm phát triển, chuyên gia kinh doanh, nhà phân tích kinh doanh, ...), được sử dụng để giao tiếp trong nhóm nhà phát triển hoặc nhà phát triển với các nhóm khác
  • Nó không có gì để làm với Quản lý dự án . Mặc dù nó có thể được sử dụng hoàn hảo trong các phương pháp quản lý dự án như Agile.
  • Bạn nên tránh sử dụng tất cả trong dự án của bạn

    DDD nhấn mạnh sự cần thiết phải tập trung nhiều nỗ lực nhất vào tên miền phụ cốt lõi. Tên miền phụ cốt lõi là khu vực của sản phẩm của bạn sẽ là sự khác biệt giữa nó là một thành công và nó là một thất bại. Đó là điểm bán hàng độc đáo của sản phẩm, lý do nó được xây dựng chứ không phải mua.

    Về cơ bản, đó là vì nó tốn quá nhiều thời gian và công sức. Vì vậy, nên chia toàn bộ tên miền thành tên miền phụ và chỉ áp dụng nó trong những tên miền có giá trị kinh doanh cao. (ví dụ không thuộc tên miền phụ chung như email, ...)

  • Nó không phải là lập trình hướng đối tượng. Đây chủ yếu là cách tiếp cận giải quyết vấn đề và ( đôi khi ) bạn không cần sử dụng các mẫu OO (như Gang of Four) trong các mô hình miền của mình. Đơn giản là vì các chuyên gia kinh doanh không thể hiểu được (họ không biết nhiều về Nhà máy, Nhà trang trí, ...). Thậm chí có một số mẫu trong DDD (chẳng hạn như Tập lệnh giao dịch, Mô-đun bảng) không phù hợp với các khái niệm OO 100%.

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.