Nếu bạn có một lớp REST ở trên cùng của ứng dụng DDD cho CRUD, bạn có để lớp REST nhổ ra mô hình miền (về mặt dữ liệu) (nói cho GET) không?Có thể trả lại mô hình miền từ REST api qua ứng dụng DDD không?
Trả lời
Nói chung, bạn muốn có thể thay đổi đối tượng miền của mình (ví dụ: khi bạn tìm hiểu điều gì đó mới về miền) mà không phải thay đổi giao diện/API công khai cho hệ thống của mình. Điều tương tự theo cách khác xung quanh: nếu thay đổi là bắt buộc đối với giao diện công khai, bạn không muốn phải thay đổi mô hình miền của mình.
Vì vậy, từ quan điểm này, tôi sẽ không bao giờ phơi bày các đối tượng miền của mình như trên một giao diện công khai. Thay vào đó, tôi sẽ tạo các đối tượng truyền dữ liệu (DTO) là một phần của giao diện công khai. Bằng cách này, những thay đổi đối với miền của tôi và api công khai có thể thay đổi độc lập.
Bạn không nên để lộ mô hình DDD. Điều này là hoàn toàn chính xác, bởi vì một lối vào SOA không nên trưng ra các chi tiết thực hiện cho các khách hàng. Người dùng của bạn nên phụ thuộc vào một chức năng nghiệp vụ, không phải là một chi tiết triển khai… Nhưng điều này giả định một thiết kế tốt đẹp của một số, có thể không đồng nhất, các ứng dụng hợp nhất thành một bus SOA.
Tôi muốn thêm vào câu trả lời vì đề cập đến giao diện CRUD khiến tôi nghĩ rằng đây có thể là trường hợp lạm dụng SOA, trong đó các nguyên tắc SOA được sử dụng để dán các lớp của ứng dụng thay vì mạng ứng dụng . SOA có nghĩa là một cách để doanh nghiệp truyền đạt các hệ thống của nó, nó không phải là một cách để thực hiện MVC! Vì vậy, đơn giản nhưng rất hiểu lầm. Ví dụ, chỉ vì GUI giao diện người dùng của bạn sử dụng các dịch vụ để truy cập vào backend mà bạn không có một "ứng dụng SOA" ... điều đó có nghĩa là gì.
Nếu đây là trường hợp SOA được sử dụng để dán lớp, vui lòng sửa đổi thiết kế của bạn và sử dụng kiến trúc thiết kế thích hợp cho mức trừu tượng đó. Nếu không, bạn sẽ giải thích sai các khuyến nghị được tìm thấy ở đây về việc không lộ mô hình DDD và không sử dụng CRUDY, và chắc chắn bạn sẽ tạo ra một mô hình miền riêng cho giao diện dịch vụ, sau đó bạn sẽ phải ánh xạ tới DDD. rằng bạn sẽ cần phải sử dụng dozer và những thứ tương tự như vậy để lập bản đồ cùng một tên với các tên khác nhau, v.v ... cho đến khi chúng tôi kết thúc với một mớ hỗn độn không thể bảo trì…
.. hãy cẩn thận.
-Alex
Redzedi rất đúng mà chúng ta cần làm rõ ....
Giống như tất cả mọi thứ, điều này là khá phức tạp hơn để làm hơn là nói. Việc tuần tự hóa một mô hình miền phức tạp có thể quá khó khăn đến nỗi bạn có thể kết thúc hoặc không đưa bất kỳ logic nào vào miền, mô hình thiếu mô hình thiếu máu (http://martinfowler.com/bliki/AnemicDomainModel.html) hoặc có một mô hình thiếu máu riêng biệt cho kiên trì, tức là DTO.
Tôi không biết điều gì là tồi tệ nhất, nhưng cả hai tùy chọn đều xấu. Bạn nên đặt logic mà đi vào mô hình trong mô hình và bạn sẽ có thể serialize trực tiếp ở khắp mọi nơi.
Trong kinh nghiệm sử dụng mô hình miền trong nhiều năm, tôi tin rằng điều tốt nhất là một điểm ở giữa. Vâng, như Fowler và Evans, các đối tượng kinh doanh phải mang logic, nhưng không phải tất cả (http://codebetter.com/gregyoung/2009/07/15/the-anemic-domain-model-pattern/) một chút thiếu máu với lớp dịch vụ tốt đẹp là tốt nhất.
Ví dụ: hóa đơn nên biết về các mục của nó và có quy trình tính tổng số của nó, tùy thuộc vào các mục. Nhưng mục của hóa đơn không cần biết về lập hóa đơn.Vì vậy, điều gì sẽ xảy ra khi một mục thay đổi về chi phí, nên nó có một con trỏ trở lại hóa đơn của cha như một tham chiếu vòng tròn và gọi thủ tục tính toán tổng của hóa đơn?
Tôi tin là không. Tôi nghĩ rằng đó là nhiệm vụ cho lớp dịch vụ trước tiên phải nhận sự kiện và sau đó dàn xếp quy trình, với việc phải ghép nối tất cả các đối tượng kinh doanh với nhau để thực hiện và vi phạm các quy tắc tương tác kinh doanh, đó là mô hình miền.
-Alex
cảm ơn Alex, SOA hay không phải là vấn đề về ánh xạ dữ liệu từ mô hình miền tới một số DTO sao cho chế độ xem có thể tiêu thụ sẽ luôn luôn tồn tại, phải không? – redzedi
Xin chào Redzedi, theo ý kiến cá nhân của tôi, tôi cố gắng ánh xạ trực tiếp mô hình miền tới cơ sở dữ liệu. Mô hình miền là mô hình dữ liệu. Vì vậy, tôi chỉ có một đối tượng kinh doanh cho cả giao diện người dùng và cơ sở dữ liệu. –
Đó là điều rất quan trọng mà tôi nói ALEX, xuất hiện rất hấp dẫn đối với tôi, nhưng tôi đã nghe mọi thứ về nó, điều Marijn nói ở trên là rất nhiều tin tưởng, nhưng theo kinh nghiệm của tôi, các lớp java trong lớp khác nhau, nơi mọi bổ sung tiếp theo dẫn đến nhiều ánh xạ mã có hướng dẫn. – redzedi
- 1. Lập mô hình miền, Đối tượng miền trong DDD
- 2. Công cụ tạo mô hình API REST
- 3. DDD: Thiết kế điều khiển miền. Tên miền có ý nghĩa gì trong DDD?
- 4. DDD có phù hợp với mọi loại ứng dụng không?
- 5. Tên miền phụ API cho ứng dụng Heroku, có thể không?
- 6. Lập bản đồ mô hình miền để xem mô hình qua AutoMapper hoặc không
- 7. Trong phương pháp DDD, ví dụ này có được mô hình đúng không?
- 8. Kết quả phủ sóng qua REST API
- 9. Ứng dụng khách REST có thể xử lý thông tin đăng nhập qua oauth
- 10. Chuyển đổi ứng dụng Android từ mô hình miễn phí/trả phí sang mở khóa trả phí trong ứng dụng
- 11. Đăng một cơ thể rỗng lên REST API qua HttpClient
- 12. ImageMagick có thể trả lại kích thước hình ảnh không?
- 13. Đề xuất API REST xương sống/tên miền chéo
- 14. Ứng dụng API REST của Ruby cho neo4j?
- 15. Phân tách các lớp miền từ Lớp mô hình Django
- 16. REST có phù hợp với các mô hình 3NF lớn
- 17. Trả lại một số trường từ ASP.NET Web API
- 18. Url REST tùy chỉnh cho Mô hình cụ thể
- 19. Giao tiếp thời gian thực dựa trên web có tương thích với mô hình REST không?
- 20. REST - chuyển tiếp trạng thái mô hình
- 21. API duckduckgo không trả lại kết quả
- 22. Tiêu thụ API RESt từ .NET
- 23. cơ thể phản ứng không đầy đủ được trả lại từ Rails 3 ứng dụng với RABL
- 24. "Mô hình miền giàu có" có vi phạm Nguyên tắc về trách nhiệm duy nhất không?
- 25. API REST với CodeIgniter
- 26. twitter tìm kiếm api không có nơi nào trả lại
- 27. CRUD trong dịch vụ ứng dụng DDD?
- 28. Cài đặt cấp ứng dụng trong DDD?
- 29. Trả lại hình ảnh từ máy chủ REST Delphi và hiển thị nó trong trình duyệt
- 30. Có thể sử dụng ray image_tag từ bên trong một mô hình không?
Có thể tạo phần REST dựa trên DTO được chú thích (lệnh, truy vấn, sự kiện miền) và nếu có? Trả lời nó ở đây pls: http://stackoverflow.com/questions/26049934/is-it-possible-to-do-ddd-and-rest-interface-and-language-mapping – inf3rno
Đây là một chút thiên vị. Không cần giả tạo "bảo vệ" người dùng từ miền trong DDD: Một số khái niệm có thể "đi qua" gần như được mô hình hóa, một số khác bị ẩn (trừ khi mô hình không hoàn toàn chính xác). Ngoài ra, trong bài gốc "REST over DDD" là vấn đề. Nên có (hầu hết thời gian) một số loại ứng dụng lớp trên đầu trang của tên miền đầu tiên. Điều này có nghĩa, các đối tượng miền đã được tách ra. –
@RomanSusi Tôi không chắc chắn ý của bạn là gì "bảo vệ người dùng khỏi miền"; bạn có thể xây dựng một chút không? Tôi hoàn toàn đồng ý rằng giao diện công cộng sẽ xử lý các khái niệm tương tự như miền. Quan điểm của tôi không phải là "trừu tượng hóa" miền xa người tiêu dùng của giao diện REST công khai, nó là về việc tách các thay đổi đối với các đối tượng miền khỏi các thay đổi đối với giao diện REST công khai này. – Marijn