điều đó có nghĩa gì?
Câu trả lời ngắn gọn: không .
Câu trả lời dài hơn: các mẫu nặng để phát triển mô hình miền không áp dụng cho các phần của giải pháp đó chỉ là cơ sở dữ liệu.
Udi Dahan đã có một quan sát thú vị có thể giúp làm rõ điều này
Dahan cho rằng một dịch vụ phải có cả chức năng và dữ liệu. Nếu nó không có dữ liệu, thì đó chỉ là một chức năng. Nếu tất cả những gì nó làm là thực hiện các thao tác CRUD trên dữ liệu, thì đó là cơ sở dữ liệu.
Quan điểm của mô hình miền, xét cho cùng, là đảm bảo rằng tất cả các cập nhật cho dữ liệu duy trì bất biến kinh doanh hiện tại. Hoặc, nói cách khác, mô hình miền chịu trách nhiệm đảm bảo rằng cơ sở dữ liệu hoạt động như hệ thống bản ghi là chính xác.
Khi bạn đang xử lý một hệ thống CRUD, bạn thường không phải là hệ thống ghi dữ liệu. Thế giới thực là cuốn sách kỷ lục và cơ sở dữ liệu của bạn chỉ là một đại diện được lưu trữ cục bộ của thế giới thực.
Chẳng hạn, hầu hết thông tin xuất hiện trong hồ sơ người dùng, như địa chỉ email hoặc số nhận dạng do chính phủ cấp, có nguồn sự thật nằm ngoài doanh nghiệp của bạn - đó là quản trị viên thư của người khác gán và thu hồi địa chỉ email, không phải ứng dụng của bạn. Chính phủ chỉ định SSN, không phải ứng dụng của bạn.
Vì vậy, thông thường bạn sẽ không thực hiện bất kỳ xác thực tên miền nào trên dữ liệu đến với bạn từ thế giới bên ngoài; bạn có thể kiểm tra tại chỗ để đảm bảo dữ liệu được hình thành tốt và được vệ sinh đúng cách ; nhưng đó không phải là dữ liệu của bạn - mô hình miền của bạn không có quyền phủ quyết.
Trong cách tiếp cận DDD bằng cách sử dụng các lớp, có vẻ như các hoạt động CRUD đi qua lớp miền. nhưng ít nhất trong trường hợp của chúng tôi, điều này dường như không có ý nghĩa.
Điều đó đúng cho trường hợp cơ sở dữ liệu là sổ ghi chép .
Ouarzy đặt nó theo cách này .
Mặc dù làm việc với rất nhiều mã kế thừa, tôi quan sát các lỗi phổ biến để xác định những gì bên trong miền và những gì bên ngoài.
Một ứng dụng có thể được coi là CRUD chỉ khi không có logic nghiệp vụ xung quanh mô hình dữ liệu. Ngay cả trong trường hợp (hiếm) này, mô hình dữ liệu của bạn không phải là mô hình miền của bạn. Điều đó chỉ có nghĩa là, vì không có logic kinh doanh nào được tham gia, chúng tôi không cần bất kỳ sự trừu tượng hóa nào để quản lý nó và do đó chúng tôi không có mô hình miền.
Chúng tôi sử dụng mô hình miền để quản lý dữ liệu thuộc về miền; dữ liệu từ bên ngoài miền đã được quản lý ở một nơi khác - chúng tôi chỉ lưu trữ một bản sao.
Greg Young sử dụng các hệ thống kho như một minh họa chính cho các giải pháp trong đó sổ ghi chép ở một nơi khác (ví dụ: sàn kho). Việc triển khai mà anh mô tả rất giống với cơ sở dữ liệu của bạn - một cơ sở dữ liệu logic để thu thập các thông điệp nhận được từ kho, và sau đó là một cơ sở dữ liệu logic riêng biệt lưu trữ các kết luận rút ra từ phân tích các thông báo đó.
Vì vậy, có lẽ chúng ta có hai bối cảnh giới hạn ở đây? Mỗi người có một mô hình khác nhau cho mộtinvestment account
Có lẽ. Tôi miễn cưỡng gắn thẻ nó như một bối cảnh bị ràng buộc, bởi vì không rõ hành lý khác đi kèm với nó là gì. Có thể là bạn có hai bối cảnh, đó có thể là một bối cảnh với sự khác biệt tinh tế trong ngôn ngữ phổ biến mà bạn chưa chọn.
Kiểm tra giấy quỳ có thể có: bạn cần bao nhiêu chuyên gia tên miền để bao quát phổ này hoặc chỉ một người nói về các thành phần theo những cách khác nhau. Về cơ bản, bạn có thể đoán được bạn có bao nhiêu bối cảnh bị ràng buộc bằng cách làm ngược luật của Conway.
Nếu bạn coi bối cảnh giới hạn được liên kết với các dịch vụ, có thể dễ dàng hơn: bạn có thể triển khai hai phần chức năng này một cách độc lập không? Có gợi ý hai bối cảnh giới hạn; nhưng nếu chúng cần được giữ đồng bộ, thì có lẽ nó chỉ là một.