2009-02-25 14 views
13

Chúng tôi có một ứng dụng khá lớn ở đây và tôi xem xét để refactor nó một chút để làm theo hướng dẫn của DDD guys.DDD: Làm cách nào để chia ứng dụng cho các bối cảnh bị ràng buộc bên cạnh mẫu thương mại điện tử?

Hiện tại vấn đề số một với vấn đề này là Bối cảnh bị ràng buộc và Bản đồ ngữ cảnh. Có lẽ tôi chỉ không lúng túng, nhưng có vẻ như tôi không thể phân chia. Ví dụ, chúng ta có đối tượng User trên khắp nơi và nó chính xác cùng một đối tượng User: tên hiển thị, id và role. Có một ví dụ khác: chúng tôi có đối tượng CatalogItem để giúp chúng tôi phân loại các thực thể khác trên khắp nơi. Chúng ta có phải giới thiệu các phụ thuộc Bối cảnh bị ràng buộc không? Có hướng dẫn nào cho vấn đề này ngoài mẫu thương mại điện tử mệt mỏi đó không?

+3

Hãy cho tôi biết nếu bạn tìm hiểu điều này. ^^ –

Trả lời

7

Tôi thấy rằng, lúc đầu, các ngữ cảnh giới hạn và rễ tổng hợp dường như là khái niệm dễ nhất trong DDD. Điều này cho đến khi bạn thực sự đến để thực hiện một ứng dụng DDD với một vấn đề thế giới thực. Không có câu trả lời dễ dàng ở đây. Nó hoàn toàn phụ thuộc vào yêu cầu nghiệp vụ của bạn (khả năng mở rộng, tính khả dụng, độ trễ, tính nhất quán, v.v.). Giải pháp "đúng" là giải pháp cân bằng những mối quan tâm này để phù hợp nhất với nhu cầu của bạn.

Với ví dụ bạn đưa ra, có một vài lựa chọn:

  • Một bối cảnh bị chặn lớn
  • riêng bối cảnh bị chặn, với các dữ liệu trùng lặp (có thể thực hiện bằng cách sử dụng xuất bản/đăng ký hệ thống tin nhắn)
  • Kéo Người dùng và CatalogItems vào bối cảnh giới hạn của riêng họ và có các ngữ cảnh giới hạn khác truy cập chúng thông qua dịch vụ

Một điều cần ghi nhớ là queryi Nhu cầu thường rất khác với nhu cầu "viết". Nó thường có thể đơn giản hóa thiết kế ứng dụng của bạn để có bối cảnh giới hạn riêng biệt hoàn toàn cho truy vấn. Nếu điều này nghe có vẻ như nó có thể áp dụng, hãy nhìn vào CQRS.

+0

Tôi không chắc chắn bạn nên gọi đó là một bối cảnh giới hạn tách biệt ... bạn có thể có một thực hiện BC tách biệt truy vấn và lệnh. Nhưng bạn sẽ sử dụng cùng một ngôn ngữ Ubiquitous và các công cụ nó chỉ là một chi tiết thực hiện. (Tôi chỉ thấy rằng nó là từ năm 2010 tôi sẽ chỉ để lại đây để ghi lại) – rad

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