Một miền là gì?


104

Tôi thấy thuật ngữ này rất nhiều trong bối cảnh kiến ​​trúc phần mềm ("mô hình miền", "thiết kế hướng theo miền", v.v.). Tôi đã googled nó, nhưng tôi nhận được vô số định nghĩa khác nhau. Vậy nó thực sự là gì?


12
Thật không may, tôi nghĩ rằng đó là một trong những từ không có định nghĩa rõ ràng và được sử dụng trong bối cảnh mơ hồ rất nhiều. Sau khi nhìn thấy nó đủ, bạn có được một sự hiểu biết. Quan điểm của tôi là bạn không nên hiểu cách sử dụng của nó ngay cả sau khi đọc tất cả các câu trả lời bạn sẽ thấy ở đây. Nó sẽ tốn thời gian.
aaaaaa

15
@aaaaaa chính xác ... Humpty Dumpty mỉm cười khinh bỉ. ... "Khi tôi sử dụng một từ," Humpty Dumpty nói, với giọng điệu khinh bỉ, "nó có nghĩa là những gì tôi chọn nó có nghĩa là - không hơn không kém."
emory

3
Tôi không nghĩ đó là sự thật mà không có định nghĩa rõ ràng. Nếu bạn nhìn vào định nghĩa webster bình thường, bạn sẽ thấy đó là "một khu vực mà sự thống trị được thực thi", "một khu vực được đánh dấu rõ rệt bởi một số tính năng vật lý". Định nghĩa tương tự trong toán học - "miền" của hàm. Bạn có thể chia một cái gì đó lớn thành các miền hoặc khu vực dựa trên người chịu trách nhiệm cho khu vực đó hoặc dựa trên một số tiêu chí. Kiểu như một mô-đun. Vì vậy, một 'mô hình miền' (trong sự hiểu biết của tôi) là một mô hình mà bạn có thể làm việc với trong của bạn logic kinh doanh của ứng dụng. DDD cũng phải làm với các loại "khu vực".
Sava B.

Câu trả lời:


9

Từ tên miền tên miền trong cuốn sách Thiết kế hướng tên miền của Eric Evans có ý nghĩa cụ thể. Đó là điều mà phần mềm nói về.

Evans đi xa hơn mặc dù. Theo quan điểm của ông, có những tên miền phụ ngay cả với cùng một phần mềm. Và đây là một phần của cuốn sách liên quan đến Thiết kế chiến lược.

Có ba miền tên miền tên miền: tên miền cốt lõi, tên miền hỗ trợ và tên miền chung. Đôi khi anh ấy sẽ gọi chúng là các tên miền phụ.

Evans cũng quan tâm sâu sắc đến hoạt động kinh doanh thực sự đằng sau phần mềm và cuốn sách không chỉ nhắm vào các nhà phát triển mà cả các kiến ​​trúc sư và nhà quản lý, những người cần xem phần mềm và doanh nghiệp có thể làm việc với nhau như thế nào, và đó là điều ông quan tâm khi thảo luận về thiết kế chiến lược và các tên miền phụ.

Vì vậy, miền cốt lõi là một phần của phần mềm đại diện cho cả lợi thế cạnh tranh và phần mềm raison d''rere của phần mềm. Đó là một phần của phần mềm, đó là lý do tại sao khách hàng sẽ mua phần mềm này so với một số phần mềm khác. Thông thường, Evans xem nó là miền chứa tỷ lệ mã nhỏ nhất. Bạn có thể nghĩ về nó như là 20% quan trọng nhất. Đó là phần mà bạn không thể thực sự mua ngoài kệ và nó có thể chỉ là một mô-đun hoặc thành phần duy nhất của phần mềm tổng thể.

Miền hỗ trợ vẫn quan trọng và có thể là duy nhất cho tổ chức nhưng không quan trọng bằng miền lõi. Không có nó, phần mềm sẽ không có giá trị và cốt lõi phụ thuộc vào nó. Nó có thể là nhiều mô-đun trong phần mềm mà bạn đã tự viết và thực hiện các chức năng quan trọng nhưng hỗ trợ cho cốt lõi.

Tên miền chung là ít tùy chỉnh nhất và trong một số trường hợp là phần ít quan trọng nhất của phần mềm. Bạn có thể đã viết nó trong nhà nhưng có thể hiệu quả hơn nếu chỉ mua nó ngoài giá hoặc sử dụng phần mềm nguồn mở nổi tiếng. Phần này của hệ thống có thể không dành riêng cho miền tổng thể của bạn, vì vậy, ví dụ bạn có hệ thống vận chuyển định tuyến bưu kiện hoặc hệ thống hồ sơ sức khỏe quản lý bệnh nhân, miền chung là một phần của các hệ thống này phổ biến và chỉ đơn giản chỉ cần có mặt để hoạt động. Điều này có thể chiếm phần lớn của toàn bộ hệ thống, nhưng không nhất thiết phải như vậy.

Từ góc độ kinh doanh, điều quan trọng là quyết định tên miền cốt lõi của bạn là gì và tập trung các nguồn lực phát triển của bạn vào đó. Evans có nhiều video, đặc biệt là trên trang InfoQ, nơi ông giải thích các khái niệm này chi tiết hơn.

Vì vậy, trong khi chúng ta thường nói về các tên miền, trong phần mềm DD, thì trong trường hợp DDD, nó không đơn giản như vẻ ngoài của nó.

Tôi nên lưu ý rằng các khái niệm về DDD không nhất thiết tồn tại trong cộng đồng phần mềm rộng lớn hơn. Các nhà phát triển, tác giả và người sản phẩm khác có thể có những ý tưởng và định nghĩa khác nhau, một số tinh tế hơn và một số ít hơn. Ngay cả các tác giả khác đã viết về DDD cũng có thể trình bày về các khái niệm này trong cuốn sách của Evans, nhưng tôi cảm thấy rằng các khái niệm này vẫn hữu ích khi viết và lên kế hoạch cho một dự án phần mềm.


1
Re: đoạn cuối cùng của bạn: có lẽ chúng ta nên có một số thỏa thuận về lĩnh vực cốt lõi của phát triển phần mềm? Nhưng, giống như đồng ý về OOP là gì, hoặc Chức năng hoặc bất kỳ thuật ngữ nào khác, tôi nghĩ rằng Humpty Dumpty đã chiến thắng từ lâu.

@nocomprende không, những khái niệm này dành riêng cho một phần mềm riêng lẻ trong một tổ chức cụ thể trong một thời gian cụ thể. Vì vậy, tên miền cốt lõi cho MSFT Windows sẽ khác nhau tùy thuộc vào điều kiện thị trường, kỳ vọng của khách hàng, v.v.
RibaldEddie

1
Tôi đoán nó làm tôi nhớ đến câu nói cũ: "Có 2 loại người: những người chia người thành hai loại, còn những người không." Nhưng ... đối với loại người thứ hai sẽ chỉ có một loại người ... - lỗi không xác định vô hạn - hệ thống tạm dừng

@nocomprende xin lỗi Tôi không thực sự hiểu nhận xét đầu tiên của bạn, một phần của việc đồng ý trên mạng về lĩnh vực cốt lõi của phát triển phần mềm là một trò đùa.
RibaldEddie

109

Các miền là bối cảnh thực tế mà bạn đang cố gắng để giải quyết một vấn đề sử dụng phần mềm. Mỗi miền đi kèm với chuyên môn, từ vựng và công cụ là một phần của miền đó.

Một ví dụ cụ thể của một miền có thể là một cái gì đó như "gia công tự động các bộ phận phức tạp bằng cách sử dụng máy cắt quay tốc độ cao". Hệ thống phần mềm và phần cứng thực hiện việc này được gọi là nhà máy CNC .

Một ví dụ khác về tên miền là bộ phận kế toán tại một công ty.

Đọc thêm
Bối cảnh giới hạn của Martin Fowler


4
Vâng Khi bạn đọc "tên miền", bạn có thể thay thế "(bị ràng buộc trong một lĩnh vực) nhất định về chuyên môn hoặc mối quan tâm".
KlaymenDK

1
Điều thú vị cần ghi nhớ là miền của phần mềm thực sự không liên quan gì đến những gì con người đang cố gắng đạt được, hoặc những gì họ sẽ hiểu. Tôi chắc chắn rằng máy tính đơn giản trong xe hơi của tôi đang làm mọi thứ để tối ưu hóa quá trình đốt cháy mà tôi không biết gì, và thẳng thắn không quan tâm. Vì vậy, giả sử rằng phần mềm là về quan điểm và mong muốn của con người là một sự hiểu lầm rất nguy hiểm. Điều này có thể có ích khi các hệ thống phần mềm bao gồm các khu vực lớn hơn, với sự nhận thức và khả năng lựa chọn mục tiêu ngày càng tăng. Này, đợi đã, Asimov không nghĩ về điều đó, từ bao lâu rồi?

1
@ user251748 - Chà, tôi nghĩ đó là về con người, và các quá trình họ tham gia, chỉ không nhất thiết là về những gì mọi người hiểu ngay lập tức.
Sipo

38

Nó đơn giản có nghĩa là không gian vấn đề bạn đang làm việc. Ví dụ: nếu bạn đang xây dựng trang web thương mại điện tử, tên miền của bạn sẽ là "thương mại điện tử" và sẽ liên quan đến các quy trình liên quan đến thực tiễn bán hàng của khách hàng / công ty của bạn. Vì vậy, một mô hình miền sẽ là một cái gì đó để đại diện cho một sản phẩm hoặc hóa đơn hoặc hồ sơ vận chuyển.


7
Ừm, cho rằng các trang web domain namescòn được gọi là tên miền, tôi nghĩ bạn nên làm rõ cách bạn đang sử dụng tên miền ở đây.
YetAnotherRandomUser

@YetAnotherRandomUser - Đối với tôi, ý nghĩa của nó khá rõ ràng. ;)
Sipo

19

Một miền là một lĩnh vực kiến ​​thức. Nó có thể là một hoạt động trong đó tồn tại các vấn đề được giải quyết bằng phần mềm của bạn. ( Wiki , Cộng đồng DDD )

Eric Evans trong cuốn sách của mình, sử dụng vận chuyển hàng hóa để giải thích DDD là gì. Trong ví dụ của mình, tên miền là tất cả mọi thứ về vận chuyển . Làm thế nào hàng hóa được di chuyển, quản lý, vận chuyển và theo dõi, vv Nó đi kèm với các quy tắc, ngôn ngữ và quy trình cụ thể của riêng mình. Những người sẽ tạo mô hình miền, đối tượng, dịch vụ và như vậy.

Khi bạn tạo một ứng dụng, bạn sẽ có một số loại ủy quyền, giống như thế giới thực của vận chuyển, không phải ai cũng có thể truy cập vào kho. Cách người dùng được ủy quyền và cách cấp quyền có thể nằm ngoài miền , vì thông tin có thể không liên quan đến việc vận chuyển hàng hóa.

Nói một cách đơn giản: một tên miền là nơi bạn làm kinh doanh . Nếu doanh nghiệp của bạn là vận chuyển hàng hóa - vận chuyển hàng hóa sẽ là tên miền của bạn. Nếu doanh nghiệp của bạn đang xác thực và ủy quyền nhân sự thì đây sẽ là miền của bạn.


7

Từ thiết kế hướng tên miền: Giải quyết sự phức tạp trong trung tâm của phần mềm , Eric Evans:

Mỗi chương trình phần mềm liên quan đến một số hoạt động hoặc sở thích của người dùng. Lĩnh vực chủ đề mà người dùng áp dụng chương trình là miền của phần mềm.

Các lĩnh vực của một chương trình đặt vé máy bay liên quan đến những người thực sự có được trên máy bay thực sự.

Lĩnh vực của một chương trình kế toán là tiền và tài chính.

Miền của hệ thống kiểm soát mã nguồn là chính sự phát triển phần mềm.

Mô hình miền, sau đó là "sự trừu tượng hóa có tổ chức và chọn lọc chặt chẽ" kiến ​​thức trong đầu của một chuyên gia tên miền.

Palermo, khi mô tả kiến ​​trúc củ hành, đã đưa ra bản tóm tắt này

Ở chính giữa chúng ta thấy Mô hình miền, đại diện cho sự kết hợp trạng thái và hành vi mô hình sự thật cho tổ chức.

Fowler, lần lượt, cung cấp

Một mô hình đối tượng của miền kết hợp cả hành vi và dữ liệu.

Nếu bạn đang xem xét các định nghĩa gần đây hơn, nhiều khả năng bạn sẽ chạy vào các tài liệu tham khảo rằng mô hình miền và mô hình dữ liệu khác nhau . Tôi không coi việc thay đổi ý nghĩa nhiều như thay đổi sự nhấn mạnh - mô hình hóa các hành vi (cách thay đổi dữ liệu để phản hồi thông tin từ bên ngoài mô hình) có độ phức tạp và biến đổi phong phú hơn so với các cách viết khác nhau .


Tôi sẽ nhẹ nhàng điều chỉnh định nghĩa của bạn từ các hoạt động trong thế giới thực sang những gì hệ thống máy tính đang làm. Ví dụ: "Miền của hệ thống kiểm soát mã nguồn là" - lưu trữ và truy xuất các tệp mã nguồn . Các miền được mô hình hóa, không phải để xử lý những thứ trong thế giới thực, mà để làm cho các hệ thống lập trình dễ dàng hơn để xây dựng và bảo trì. Vì vậy, sự nhấn mạnh là những gì một máy tính có thể làm để tạo điều kiện cho điều đó, chứ không phải những gì con người có thể làm. Tia X kỹ thuật số cải thiện độ nhạy và xử lý hình ảnh của quy trình X-Ray, chúng không làm gì cho con người và sẽ hữu ích cho việc quét hành lý không giám sát.

2

Vì bạn có thể đã có ý tưởng về miền là gì, tôi đoán bước tiếp theo bạn sẽ thực hiện là xác định tên miền phụ, mô hình miền và quan trọng hơn là bối cảnh bị ràng buộc.

Tôi bắt đầu với việc đưa quan điểm của tôi về tên miền mặc dù.

Miền

Miền là thực tế chúng ta sinh sống: các thực thể của nó, hành vi của họ, luật pháp họ tuân theo. Nó tồn tại trước chúng ta và sẽ tồn tại sau chúng ta, dưới hình thức này hay hình thức khác. Sự tồn tại của nó không phụ thuộc vào nhận thức của chúng ta. Các nhà tiếp thị đưa ra các tính năng mới và thực hiện phân tích thị trường, Người quản lý tài khoản chính giao tiếp với khách hàng, nhà phát triển phần mềm tự động hóa các quy trình kinh doanh. Đó là lý do tại sao tên miền được gọi là không gian vấn đề.

Tên miền phụ

DDD ngụ ý phân tách miền thành các tên miền phụ, để dễ dàng mô hình hóa và hiểu. Thực tế là bạn điều hành một doanh nghiệp cho rằng có ít nhất một giá trị kinh doanh chiếm ưu thế. Người bạn kiếm được tiền với. Một trong những chúng tôi bắt đầu kinh doanh của chúng tôi cho. Vì vậy, ngay cả khi bạn không biết một từ như tên miền Core Core, thì nó vẫn hiện diện. Điều tương tự cũng áp dụng cho các tên miền phụ: có thể bạn sẽ cần một sổ sách kế toán, nguồn nhân lực, hỗ trợ kỹ thuật - nhưng nó chỉ là thứ yếu.

Mô hình miền

Không cần mô hình hóa toàn bộ các tên miền phụ được trích xuất. Có một bộ quy tắc nhất định trong mỗi tên miền phụ mà chúng tôi quan tâm. Một quy tắc được đặt trong một số tên miền phụ cần thiết để đạt được kết quả kinh doanh nhất định được gọi là mô hình.

Bối cảnh giới hạn

Điều quan trọng nhất là bối cảnh bị ràng buộc là một ranh giới logic.

Khi cả hai tên miền phụ và tên miền lõi được xác định, đã đến lúc triển khai mã. Bối cảnh giới hạn xác định 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 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. Nó 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.

Cái gì tiếp theo?

Nếu bạn quan tâm đến việc khái niệm bối cảnh bị ràng buộc tương quan như thế nào với khái niệm tên miền phụ, cách xác định tên miền phụ và bối cảnh bị ràng buộc, cách thể hiện giao tiếp của họ với nhau và cách tổ chức các nhóm với các khái niệm này, có lẽ bạn sẽ quan tâm đến điều này đọc thêm .


Tôi muốn nói rằng một miền cho phần mềm là những gì phần mềm làm. Nó chắc chắn không tồn tại trước chúng tôi và nó hoàn toàn do chúng tôi tạo ra để làm những việc mà chúng tôi muốn ủy thác để chúng xảy ra mà không có sự tương tác của chúng tôi. Nói cách khác, đó là về một giấc mơ chúng ta đã có, điều mà chúng ta muốn quên đi. Và, chúng tôi nhanh chóng quên đi cách phần mềm hoạt động ngay khi được triển khai. Phần mềm là một trò chơi phù hợp hơn với máy tính để giải quyết, chúng tôi chỉ làm điều đó cho đến bây giờ vì chúng tôi chưa xây dựng máy tính, để giải quyết vấn đề mà chúng tôi không muốn bị làm phiền nữa. Nhưng, rất sớm ...

Tôi đã không làm cho mình rõ ràng trong phần này - "trước chúng ta", xấu của tôi. Tôi hoàn toàn không có nghĩa là miền tồn tại trước loài người. "Chúng tôi" có nghĩa là giống như một nhà phát triển phần mềm giải quyết vấn đề tự động hóa, giả sử, các quy trình kinh doanh trong thương mại điện tử. Khái niệm thương mại rõ ràng đã tồn tại trước họ. Vì vậy, trách nhiệm của nhà phát triển là làm cho nó có thể ủy thác mọi thứ cho máy tính, như bạn đã nói.

Đúng. Quan điểm của tôi là mọi người nghĩ rằng hệ thống máy tính là một cách để đối phó với thế giới thực. Nhưng máy tính mang lại rất nhiều ý tưởng, yêu cầu và mối quan tâm mà đơn giản là không phải là một phần của miền. Nó giống như nói rằng phẫu thuật là một cách để đối phó với các vấn đề tình cảm. Vâng, lobotomy hoạt động, nhưng vấn đề tình cảm có ít liên quan đến não. Và, cảm xúc của tôi bị ảnh hưởng mạnh mẽ bởi hormone và chất dẫn truyền thần kinh, vậy SSRI là một phần của sinh học, tâm lý học, các mối quan hệ, hay chúng là một thể loại cho chính họ? Máy tính là về máy tính, không phải là đồ thật.

1
Máy tính là về mô hình hóa những điều thực tế. Chỉ là một lĩnh vực khác có thể thực hiện được những điều thực tế, quy trình kinh doanh thực tế có thể được thực hiện, những hạn chế kinh doanh thực sự có thể được áp dụng. Có thể, 50 năm trước tôi đã trả 1 đô la cho nhân viên thu ngân trong một cửa hàng, bây giờ là toàn bộ quá trình mua có thể không có sự tương tác với con người. Tuy nhiên, tiền thật của tôi đã được rút từ tài khoản ngân hàng thật của tôi. Vì vậy, không có vấn đề gì liên quan đến bất kỳ quá trình, máy tính hoặc con người hoặc smth khác. Có lẽ nó có thể khiến bạn quan tâm: Medium.com/@wrong.about/ từ

Tiền không có thật. Quy trình kinh doanh không có thật. Tất cả mọi thứ mà chúng ta có thể nói là một khái niệm, không có thật.
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.