2010-11-16 26 views
23

Tôi khá mới với DDD và muốn biết về bất kỳ cạm bẫy nào bạn có thể muốn chia sẻ. Tôi sẽ tóm tắt nó sau này để biết thêm người mới để đọc :)Cạm bẫy miền-thiết kế (DDD)

Cảm ơn

Tóm tắt cho đến nay:

  • Anemic domain model nơi đơn vị của bạn chủ yếu chỉ dữ liệu mang và không chứa logic kinh doanh
  • Không sử dụng các ngữ cảnh bị chặn đủ
  • Tập trung quá nhiều vào các mẫu

Có một bài thuyết trình hay về chủ đề này cũng như here (video).

+1

Có thể bạn nên đặt câu hỏi về cộng đồng wiki này. –

Trả lời

32

Có lẽ quan trọng nhất: không grokking các nguyên tắc cơ bản, trung tâm của Mô hình miền và đại diện của nó trong Ngôn ngữ phổ biến. Với rất nhiều lựa chọn công nghệ xung quanh, nó rất dễ dàng cho đầu của bạn để điền vào với ORMs, khung MVC, ajax, sql vs nosql, ...Vì vậy, có rất nhiều không gian còn lại cho vấn đề thực tế bạn đang cố gắng giải quyết.

Và đó là thông điệp chính của DDD: không. Thay vào đó, hãy tập trung rõ ràng vào không gian vấn đề trước tiên và quan trọng nhất. Xây dựng một mô hình miền của sự lộn xộn của sự lộn xộn về kiến ​​trúc để nắm bắt, phơi bày và truyền đạt miền.

Ồ, và một điều khác: suy nghĩ bạn cần Dịch vụ miền cho mọi thứ bạn có thể thực hiện trong mô hình miền. Không. Trước tiên, bạn nên đặt logic miền với loại Thực thể/Giá trị thuộc về. Bạn chỉ nên tạo các dịch vụ miền khi bạn tìm thấy các hàm không tự nhiên thuộc về một E/V. Nếu không, bạn kết thúc với mô hình miền thiếu máu được tô sáng ở nơi khác.

hth.

+2

Tôi tìm thấy ý tưởng khá trung thực mà cần cho dịch vụ miền là một dấu hiệu của chưa được tổng hợp gốc không được công nhận. –

+0

Wow. Điều này đang làm tan chảy tâm trí tôi. Vui lòng xem [câu hỏi của tôi] (http://stackoverflow.com/q/4300859/56145). –

+0

Quy tắc thứ hai của bạn không phải là quy tắc DDD, nó là một khái niệm OO đơn giản. Mã trong một mức độ trừu tượng sai mùi. – inf3rno

14

Một trong những cạm bẫy lớn nhất là bạn kết thúc bằng cái gọi là anemic model nơi thực thể của bạn chủ yếu chỉ mang dữ liệu và không chứa logic nghiệp vụ. Tình huống này thường phát sinh khi bạn xây dựng mô hình miền của mình trên đầu mô hình dữ liệu quan hệ hiện có và chỉ làm cho mỗi bảng trong cơ sở dữ liệu trở thành một thực thể trong mô hình miền của bạn.

+3

Tôi đồng ý với điều này. Là người đầu tiên tôi rơi vào –

+0

Đối với những người mới, tôi không đồng ý với điều này. DDD không phải là một triết lý để thực hiện, đúng hơn là một triết lý cho việc triển khai, trong đó các khả năng là vô tận. – Chazt3n

+0

Vì vậy, bạn không khuyên bạn nên sử dụng lập trình chức năng? – Den

3

Hãy coi chừng Big Ball of Mud.

Một trong những cạm bẫy của thiết kế điều khiển miền là giới thiệu sự mơ hồ thành một mô hình. Như đã giải thích trong bài viết Strategic Domain Driven Design with Context Mapping:

mơ hồ là siêu nhân vật phản diện của Ngôn ngữ Ubiquitous của chúng tôi

Điều này có thể xảy ra khi hai khái niệm khác nhau chia sẻ cùng tên, hoặc khi khái niệm tương tự có thể có khác nhau sử dụng. Nó có thể là cần thiết để

phơi bày cấu trúc miền trong về bối cảnh bị chặn trong một bối cảnh đồ

Nếu một mô hình được sử dụng trong quá nhiều cách khác nhau, hoặc có quá nhiều trách nhiệm, nó có thể là một dấu hiệu cho thấy nó nên được chia.

6

Không sử dụng bounded contexts đủ. Nó hướng về phía sau của cuốn sách lớn màu xanh nhưng Eric Evans đã đi vào hồ sơ nói rằng ông tin rằng bối cảnh giới hạn và ngôn ngữ phổ biến là những khái niệm quan trọng nhất.

Tương tự, mọi người có xu hướng tập trung quá nhiều vào các mẫu. Đó không phải là thịt của DDD.

Ngoài ra, nếu bạn không có nhiều quyền truy cập vào các chuyên gia tên miền, có thể bạn không làm DDD, tốt nhất bạn là DDDish.

Cụ thể hơn, nếu bạn kết thúc với nhiều-nhiều mối quan hệ, bạn đã có thể thiết kế một cái gì đó sai và cần phải đánh giá lại nguồn gốc tổng hợp của bạn/ngữ cảnh

+0

Điểm cuối cùng của bạn lại: mối quan hệ nhiều-nhiều. Tại chỗ trên! –

11

Bạn có thể thưởng thức presentation của Greg Young về lý do DDD không thành công.

Nói tóm lại:

  • Thiếu ý định
  • thiếu máu Domain Model
  • DDD-Lite
  • Thiếu ly
  • Ubiquitous gì?
  • Thiếu tinh
  • Proxy miền Expert (chuyên gia phân tích kinh doanh)
+0

Đó là một video tuyệt vời. –

3

Chỉ thêm vào những gì người khác đã nói; Kinh nghiệm cá nhân của tôi là mọi người thường kết thúc với một mô hình thiếu máu và một mô hình duy nhất thay vì nhiều mô hình ngữ cảnh cụ thể.

Một vấn đề khác là nhiều tập trung hơn vào cơ sở hạ tầng và các mẫu được sử dụng trong DDD. Chỉ vì bạn có thực thể và kho lưu trữ và đang sử dụng (n) Hubernate nó không có nghĩa là bạn đang làm DDD.

4

Nó không phải từ kinh nghiệm cá nhân của tôi với chủ đề, nhưng nó đã được đề cập trong một vài lần trong sách DDD và đó là những gì tôi đã suy nghĩ gần đây: sử dụng thực thể khi bạn thực sự cần danh tính, trong trường hợp khác sử dụng giá trị Đối tượng. Tức là, mô hình thực thể thường xảy ra là sự lựa chọn mặc định cho bất kỳ danh từ mô hình nào, và nó không phải là cách mà nó cần.

+0

Tuy nhiên, không sử dụng các đối tượng giá trị với EF. Chỉ cần không. (Jimmy Bogard có thẻ ghi điểm EF DDD, liên kết hiện bị hỏng) – Chazt3n

Các vấn đề liên quan