Điều gì, liên quan đến DDD, là một bối cảnh bị ràng buộc?


40

Khi làm việc thông qua cuốn sách "Triển khai thiết kế hướng tên miền" của Vaughn Vernon, tôi đã không thể hiểu rõ về bối cảnh bị ràng buộc thực sự là gì.

Cuốn sách định nghĩa bối cảnh giới hạn là "ranh giới khái niệm nơi áp dụng mô hình miền. Nó cung cấp Ngôn ngữ Ubiquitous được nhóm phát biểu và thể hiện trong mô hình phần mềm được thiết kế cẩn thận" (phần "Hướng dẫn về cuốn sách này"). Định nghĩa này sẽ làm cho nó nghe có vẻ như bối cảnh bị ràng buộc là mô hình và ngôn ngữ của một tên miền phụ, trong đó tên miền phụ đó có thể là miền chính (có vẻ như nó phải được gọi là "tên miền phụ", nhưng đó là một cuộc thảo luận khác ...). Điều này vẫn để lại một sự mơ hồ về những gì một bối cảnh giới hạn cung cấp. Đây có phải là một nhóm của một hoặc nhiều tên miền phụ? Nếu chỉ có một tên miền phụ tương ứng với một bối cảnh bị ràng buộc, thì bối cảnh bị ràng buộc thực sự nói với chúng ta là gì?

Tuy nhiên, Chương 3 của cùng một cuốn sách đề cập đến các kỹ thuật tích hợp giữa các bối cảnh bị ràng buộc. Tuy nhiên, điều này dường như ngụ ý rằng các bối cảnh bị ràng buộc thực sự là các hệ thống phần mềm hoặc đồ tạo tác của một số loại.

Martin Fowler thảo luận ngắn gọn về ý tưởng về bối cảnh bị ràng buộc ( http://martinfowler.com/bliki/BoundedContext.html ), nhưng không thực sự làm rõ vấn đề.

Vào cuối ngày, những gì một bối cảnh bị chặn? Đây có phải là một nhóm các tên miền phụ? Mô hình và ngôn ngữ cho một tên miền phụ? Việc thực hiện một tên miền phụ? Không có những câu trả lời này, có vẻ khá khó để hiểu làm thế nào để phân tách một không gian vấn đề thực tế thành các bối cảnh bị ràng buộc.



2
Bài đăng đó không thực sự làm cho định nghĩa rõ ràng, ít nhất là đối với tôi. Nó thảo luận về ý tưởng của các bối cảnh bị ràng buộc vì chúng có thể áp dụng có tổ chức, nhưng nó không bao giờ thực sự kết nối điều này lại với phát triển phần mềm.
Michael

1
ĐƯỢC. Chà, mặc dù tôi không phải là chuyên gia DDD, tôi đã thấy mô tả này từ Microsoft hữu ích (trong đoạn Giới thiệu): msdn.microsoft.com/en-us/l Library / jj591572.aspx . Nó nói: ...
Robert Harvey

1
Bối cảnh giới hạn là các thành phần tự trị, với các mô hình miền riêng và ngôn ngữ phổ biến của riêng chúng. Họ không nên có bất kỳ sự phụ thuộc nào vào nhau trong thời gian chạy và nên có khả năng chạy cách ly. Tuy nhiên, chúng là một phần của cùng một hệ thống và cần trao đổi dữ liệu với nhau ...
Robert Harvey

1
... Nếu bạn đang triển khai mẫu CQRS trong ngữ cảnh giới hạn, bạn nên sử dụng các sự kiện cho loại giao tiếp này: bối cảnh bị ràng buộc của bạn có thể phản hồi các sự kiện được nêu ra bên ngoài bối cảnh bị ràng buộc và bối cảnh bị ràng buộc của bạn có thể xuất bản các sự kiện khác bối cảnh giới hạn có thể đăng ký. Sự kiện, cho phép bạn duy trì khớp nối lỏng lẻo giữa các bối cảnh bị ràng buộc của bạn.
Robert Harvey

Câu trả lời:


38

Bối cảnh giới hạn và Subdomain tồn tại ở các cấp độ khác nhau.

Một Subdomain là một phần của không gian vấn đề, đó là một phân vùng tự nhiên của hệ thống, thường phản ánh cấu trúc của tổ chức. Vì vậy, hậu cầnhoạt động có thể được tách ra khỏi hóa đơn và thanh toán . Eric biệt cốt lõi , hỗ trợchung tên miền phụ theo sự liên quan kinh doanh của mình trong kịch bản nhất định.

Các bối cảnh là các phần của không gian giải pháp. Họ là những người mẫu . Sẽ là một điều tốt nếu có chúng, phản ánh phân vùng tên miền phụ ... nhưng cuộc sống không phải lúc nào cũng dễ dàng. Và bạn có thể có miền di sản cồng kềnh bao gồm tất cả mọi thứ, hoặc nhiều ngữ cảnh hơn trong cùng một tên miền phụ (tức là ứng dụng cũ mà ứng dụng thay thế mà ai đó đang xây dựng).

Để có Bối cảnh bị ràng buộc, bạn cần phải có một mô hình và một ranh giới rõ ràng xung quanh nó. Chính xác những gì còn thiếu trong nhiều ứng dụng dựa trên dữ liệu sử dụng cơ sở dữ liệu để chia sẻ dữ liệu.

Một cách khác - trực giao - để thấy nó có thể là như sau. Ngôn ngữ phổ biến , điều kiện đặc biệt khi mọi thuật ngữ có một định nghĩa rõ ràng duy nhất, không có quy mô. Bạn càng phóng to nó, càng có nhiều sự mơ hồ. Nếu bạn muốn đạt được các mô hình chính xác, rõ ràng, bạn cần làm cho ranh giới của chúng rõ ràng và nói nhiều Ngôn ngữ Ubiquitous nhỏ, mỗi ngôn ngữ trong một Bối cảnh bị ràng buộc, với mục đích được xác định rõ .


1
Vì vậy, trong một thế giới lý tưởng, sẽ có mối quan hệ 1-1 giữa các tên miền phụ và bối cảnh bị ràng buộc? (Hiểu, rõ ràng, những gì là lý tưởng và những gì là sự thật khác nhau).
Michael

2
Không nhất thiết: điều quan trọng là một BC chồng chéo nhiều tên miền phụ là một mùi khó chịu. Chà ... nó không bị ràng buộc. Theo thuật ngữ DDD, một mô hình phải hoàn toàn phù hợp với mục đích của nó và các tên miền phụ khác nhau có các mục đích khác nhau (và thậm chí có thể là các ông chủ khác nhau với các mục tiêu khác nhau). Nhưng trong cùng một tên miền phụ, BC khác nhau có thể tồn tại vì những lý do khác nhau. Ứng dụng web và thiết bị di động có thể là trường hợp hoặc các mô hình khác nhau để lập kế hoạch hoặc thực hiện .
ZioBrando

Nhưng điều quan trọng là phải hiểu rằng có hai họ vấn đề: 1) đọc bối cảnh hiện tại (nơi bạn chỉ có thể chấp nhậnphân loại các mô hình và sự hợp tác hiện có), 2) thiết kế phần mềm phù hợp với các ràng buộc hiện có, do đó áp đặt ranh giới bối cảnh giữa các mô hình nhỏ, định hướng mục đích. Trong kịch bản thứ hai, bạn sẽ không cố tình chồng lấp các biên giới tên miền phụ. ... Nói chung, tìm kiếm phần mềm hoàn hảo trong một tổ chức không hoàn hảo có thể là điều khó khăn. Nhưng giải quyết những mâu thuẫn đó có thể đáng để nỗ lực.
ZioBrando

8

Các kỹ thuật Thiết kế hướng miền được sử dụng để giúp chúng tôi tạo ra các mô hình của thế giới mà chúng ta đang sống. Những mô hình này tồn tại như ý tưởng trong tâm trí của những người tham gia vào một dự án.

Bởi vì thần giao cách cảm vẫn còn ở giai đoạn sơ khai, những ý tưởng này được truyền đạt giữa những người sử dụng từ và cụm từ.

Từ và cụm từ có thể mơ hồ ở thời điểm tốt nhất. Để giúp chúng tôi giảm sự mơ hồ, chúng tôi sử dụng 'bối cảnh' để làm rõ ý nghĩa của chúng.

Khi mọi người đắm chìm trong một dự án phần mềm kéo dài nhiều năm, họ dường như quên đi bối cảnh từ đó nảy sinh ý tưởng biến thành những từ biến thành tên biến được đưa vào mã.

Người mới đến dự án và bắt đầu sử dụng và tiêu thụ ngôn ngữ của nó. Có lẽ họ là người dùng, có lẽ họ là nhà phát triển. Nếu không có bối cảnh cung cấp cho họ, họ sẽ đưa ra bối cảnh của riêng họ (và, do đó, có nghĩa là) từ kinh nghiệm sống của chính họ.

Bối cảnh mới được áp dụng này sẽ hướng dẫn cách các nhà phát triển mới tái cấu trúc hoặc phát triển mã. Nếu họ áp dụng bối cảnh sai, họ sẽ cấu trúc lại và phát triển mã theo, có lẽ là hơi quá, sai hướng. Hướng sai, tuy nhiên nhẹ, có thể gây ra vấn đề lớn hơn nhiều xuống dòng.

Như tôi thấy, một "bối cảnh bị ràng buộc" chỉ là một "bối cảnh được làm rõ" được trao cho những người mới tham gia dự án để họ không áp dụng bối cảnh độc đoán của riêng họ để làm mờ mô hình, được mài giũa đẹp đẽ của chúng tôi.

Đó là một số ghi nhận rõ ràng, bởi đội bóng, rằng this phrase, trong this part of the projectphương tiện chính xác this thing(và không, như bạn có thể cũng nghĩ, that thing).

Cũng như đó là một ý tưởng tốt để đánh dấu ranh giới giữa khu vườn của bạn và khu vườn của người hàng xóm của bạn. Bạn xác định ranh giới một cách rõ ràng để bạn không tức giận khi họ bắt đầu đào một chiếc giường hoa trên bãi cỏ được cắt tỉa hoàn hảo của bạn.

Thế là xong. Đó là một ý tưởng rất đơn giản, quan trọng đến nỗi nhiều người đã viết về nó.

Vì vậy, có. Một bối cảnh giới hạn hoàn toàn theo nghĩa đen là một ranh giới, một "hàng rào", phân biệt giữa bối cảnh của một tên miền phụ với bối cảnh của một tên miền phụ khác trong một dự án.

Mô hình và ngôn ngữ của một tên miền phụ được tách biệt khỏi mô hình và ngôn ngữ khác để tránh sự mơ hồ về ý nghĩa.

Nhưng có. Thế giới không đơn giản như vậy.

Bạn và nhóm phải nghiêm ngặt trong việc tuân thủ bối cảnh đã xác định. Thật sự rất dễ dàng để lười biếng và tưởng tượng lại bối cảnh để cắt góc trong quá trình xây dựng phần mềm.

Ngoài ra, mọi thứ tương tác với những thứ khác và bối cảnh bị ràng buộc cũng cần phải tương tác với nhau. Vì vậy, có nhiều mẫu khác nhau để mô tả cách các tương tác đó xảy ra. Xem cuốn sách của Eric Evan, Thiết kế hướng miền Chương 14 để biết các mẫu khác nhau: Hạt nhân chung, Nhà cung cấp khách hàng, Người tuân thủ, Lớp chống tham nhũng, Cách riêng biệt, Dịch vụ lưu trữ mở, Ngôn ngữ được xuất bản.


1
Về cơ bản, đó là một hàng rào xung quanh một tên miền phụ.
Robert Harvey

1
Vâng. Theo như tôi có thể thấy nó. Đó là một hàng rào.
JW01

0

Về cơ bản, Bounded bối cảnh xác định một số ranh giới hữu hình về khả năng áp dụng của một số tên miền phụ. Đó là một khu vực trừu tượng nơi một tên miền phụ nhất định có ý nghĩa, trong khi những miền khác thì không. Vì vậy, đây có thể là một bài nói chuyện, một bài thuyết trình, một dự án mã với các ranh giới vật lý được xác định bởi tạo tác.

Trong các tình huống khác nhau, tôi sử dụng ba quan điểm khác nhau, hoặc ẩn dụ của khái niệm Bounded Context.

Từ phối cảnh thời gian chạy, nó biểu thị các ranh giới logic, được xác định bởi hợp đồng của một dịch vụ nơi mô hình được triển khai. Hợp đồng có thể được trình bày dưới dạng API của dịch vụ này hoặc một tập hợp các sự kiện mà nó xuất bản và tiêu thụ. Vì vậy, từ quan điểm này Bối cảnh bị ràng buộc không có gì để làm với các ranh giới vật lý.

Từ quan điểm của một chuyên gia tên miền, bối cảnh bị ràng buộc là một lĩnh vực nơi các quy trình kinh doanh nhất định được thực hiện, ngôn ngữ phổ biến nhất định được áp dụng và một thuật ngữ nhất định có ý nghĩa rõ ràng, trong khi các thuật ngữ khác thì không. Vì vậy, nó chỉ là một hình chữ nhật được vẽ trên một tờ giấy hoặc bảng trắng.

Đối với một nhà phát triển phần mềm, tức là, từ phối cảnh mã tĩnh, bối cảnh giới hạn thể hiện cách tôi thiết kế các mô hình của mình xung quanh các tên miền phụ tương ứng. Có bao nhiêu cơ sở mã một tên miền phụ cụ thể được triển khai với? Những khái niệm nào chúng bao gồm? Những khái niệm nào được áp dụng trong mỗi chúng? Đó là lý do tại sao người ta nói rằng các bối cảnh giới hạn thuộc về một không gian Giải pháp.

Tôi thực sự thích ví dụ này về khái niệm Bounded Context.

Một câu hỏi quan trọng khác (nếu không phải là câu hỏi quan trọng nhất) là làm thế nào để xác định bối cảnh bị ràng buộc . Nếu bạn làm điều đó không chính xác, bạn sẽ kết thúc với các dịch vụ trò chuyện, không thể nhầm lẫn và kết hợp chặt chẽ , còn được gọi là nguyên khối phân tán .

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.