Tôi đã nhìn thấy rất nhiều câu hỏi liên quan đến ánh xạ DTO cho đối tượng miền, nhưng tôi không cảm thấy họ đã trả lời câu hỏi của tôi. Tôi đã sử dụng nhiều phương pháp trước và có ý kiến riêng của mình nhưng tôi đang tìm kiếm thứ gì đó cụ thể hơn một chút.Thực tiễn tốt nhất để ánh xạ DTO cho đối tượng miền?
Tình hình:
Chúng tôi có nhiều đối tượng miền. Chúng tôi đang sử dụng mô hình CSLA để các đối tượng miền của chúng tôi có thể khá phức tạp và chúng chứa quyền truy cập dữ liệu của riêng họ. Bạn không muốn vượt qua những xung quanh trên dây. Chúng tôi sẽ viết một số dịch vụ mới sẽ trả về dữ liệu ở một số định dạng (.Net, JSON, v.v.). Vì lý do này (và các lý do khác), chúng tôi cũng đang tạo một đối tượng truyền dữ liệu, nạc để truyền xung quanh trên dây.
Câu hỏi của tôi là đối tượng DTO và miền được kết nối như thế nào?
Phản ứng đầu tiên của tôi là sử dụng Fowler, DTO pattern-type solution. Tôi đã nhìn thấy điều này được thực hiện nhiều lần và nó cảm thấy phù hợp với tôi. Đối tượng miền không chứa tham chiếu đến DTO. Một thực thể bên ngoài (một "mapper" hoặc "assembler") được gọi để tạo DTO từ một đối tượng miền. Thông thường có một ORM ở phía đối tượng miền. Nhược điểm của điều này là "người lập bản đồ" có xu hướng cực kỳ phức tạp cho bất kỳ tình huống thực tế nào và có thể rất mong manh.
Một ý tưởng khác được đưa ra là để đối tượng miền "chứa" DTO, vì nó chỉ là một đối tượng dữ liệu gọn gàng. Các thuộc tính đối tượng miền sẽ tham chiếu nội bộ các thuộc tính DTO và chỉ có thể trả về DTO nếu được yêu cầu. Tôi có thể thấy không có vấn đề với điều này nhưng nó cảm thấy sai. Tôi đã thấy một số bài viết mà mọi người sử dụng NHibernate xuất hiện để sử dụng phương pháp này.
Có cách nào khác không? Là một trong những cách trên giá trị sử dụng? Nếu có hay không, tại sao?
Cảm ơn mọi thông tin chi tiết trước.
Trình tự động trông thú vị. Tôi đã nhìn thấy rất nhiều mã trước khi nó sẽ thay thế. Vấn đề chính của tôi là nếu tôi bị mắc kẹt với một tấn mã lập bản đồ vì lý do gì đó, tôi muốn tự mình kiểm soát nó hơn. –
Khi chúng tôi đi từ DTOs _to_ Domain Objects, ánh xạ đó là 100% thủ công. Đó là một vấn đề khó giải quyết hơn, vì chúng tôi cố gắng giữ cho các đối tượng miền hoạt động dựa trên cơ sở, thay vì chỉ đơn thuần là các thùng chứa dữ liệu. Đi _to_ một DTO, đó là một vấn đề dễ giải quyết. –
Tôi sẽ đồng ý rằng nó là sai trong đó đối tượng miền nên không có kiến thức về đối tượng dto. Trong khi chúng có thể liên quan trong trường hợp này, mục đích của chúng hoàn toàn tách biệt (các dtos thường được tạo ra cho mục đích) và bạn sẽ tạo ra một sự phụ thuộc không cần thiết. – Sinaesthetic