Tôi đã thấy rất nhiều câu hỏi liên quan đến ánh xạ DTO với các đố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 đây và có ý kiến của riêng mình nhưng tôi đang tìm kiếm thứ gì đó cụ thể hơn một chút.
Tình huống:
Chúng tôi có nhiều đối tượng miền. Chúng tôi đang sử dụng mô hình CSLA nên 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 chúng. Bạn không muốn chuyển những thứ này 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 tinh gọn để truyền trên dây.
Câu hỏi của tôi là: Đối tượng DTO và Domain nên được kết nối như thế nào?
Phản ứng đầu tiên của tôi là sử dụng dung dịch kiểu mẫu DTO Fowler . Tôi đã 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 ("người lập bản đồ" hoặc "trình hợp dịch") được gọi để tạo DTO 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 vẽ bản đồ" có xu hướng trở nên cực kỳ phức tạp đối với 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 đơn giản. 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 báo mà những người sử dụng NHibernate dường như sử dụng phương pháp này.
Có những cách khác? Một trong những cách trên có đáng sử dụng không? Nếu có hoặc nếu không, tại sao?