Trong một dự án ASP.NET MVC, chúng tôi đang sử dụng AutoMapper để ánh xạ từ mô hình miền sang viewmodel - và đôi khi cũng làm phẳng một hệ thống phân cấp trong khi làm như vậy. Điều này làm việc giống như một sự quyến rũ và làm cho logic dựng hình của quan điểm của chúng tôi rất gọn gàng và đơn giản.Làm thế nào để thay đổi editmodel/postmodel thành mô hình miền
Sự nhầm lẫn bắt đầu khi chúng tôi muốn đi theo cách khác từ chế độ xem (hoặc postmodel hoặc editmodel) sang mô hình miền, đặc biệt là khi cập nhật đối tượng. Chúng ta không thể sử dụng tự động/lập bản đồ hai chiều vì:
- chúng ta sẽ phải xẹp lún hệ thống phân cấp dẹt
- tất cả các thuộc tính trên mô hình miền sẽ phải có thể thay đổi/có setters công
- những thay đổi đến từ chế độ xem không phải lúc nào cũng chỉ là các thuộc tính phẳng được ánh xạ trở lại miền, nhưng đôi khi cần gọi các phương thức như "
ChangeManagerForEmployee()
" hoặc tương tự.
này cũng được mô tả trong bài viết Jimmy Bogards: The case for two-way mapping in AutoMapper, nhưng giải pháp này không được mô tả một cách chi tiết, duy nhất mà họ đi:
Từ EditModel để CommandMessages - đi từ loosely- đã nhập Chỉnh sửaMô hình thành các tin nhắn được nhập mạnh mẽ, được chia nhỏ. Một EditModel có thể tạo ra một nửa tá tin nhắn.
Trong một tương tự SO question có một câu trả lời bằng Mark Seeman nơi ông đề cập rằng
Chúng tôi sử dụng người vẽ bản đồ và dịch vụ trừu tượng để ánh xạ một PostModel đến một đối tượng tên miền
nhưng các chi tiết - việc triển khai khái niệm và kỹ thuật - bị bỏ qua.
ý tưởng của chúng tôi ngay bây giờ là:
- nhận được một FormCollection trong phương pháp hành động của bộ điều khiển
- Lấy mô hình miền gốc và làm phẳng nó để viewModelOriginal và viewModelUpdated
- sáp nhập FormCollection vào viewModelUpdated sử dụng
UpdateModel()
- Sử dụng một số phương pháp trợ giúp chung để so sánh viewModelOriginal với chế độ xemModelUpdated
- Hoặc A) Tạo CommandMessages a la Jimmy Bogard hoặc B) Biến đổi sự khác biệt trực tiếp vào mô hình miền thông qua các thuộc tính và phương pháp (có thể lập bản đồ 1-1 thuộc tính trực tiếp thông qua AutoMapper)
Ai đó có thể cung cấp một số ví dụ về cách họ đến từ FormCollection qua editmodel/postmodel đến mô hình miền? "CommandMessages" hoặc "trừu tượng bản đồ và dịch vụ"?
Tôi sẽ đưa ra câu hỏi này một nghìn phiếu bầu nếu tôi có thể. Tôi đã tìm kiếm vô tận để có một câu trả lời chắc chắn cho điều này. – devuxer
Bạn đã làm gì với quá trình cuối cùng? –
Xin chào Tom. Chúng tôi đã kết thúc bằng cách sử dụng một hỗn hợp và giải pháp phù hợp, nơi chúng tôi 1. Lấy đối tượng Dom từ DAL/DB, 2. flatten Dom đối tượng để ViewModel, 3. sử dụng TryUpdateModel với FormColl trên ViewModel, 4.sử dụng AutoMapper để thực hiện ánh xạ ngược từ khung nhìn phẳng đến Dom (Hierarchy) trên các thuộc tính đơn giản và 5. sử dụng một dịch vụ để ánh xạ các thuộc tính không tầm thường từ viewmodel đến các phương thức Dom (đối tượng Dom và/hoặc Dom Service). Hy vọng điều này sẽ giúp - tôi không chắc câu trả lời nào để đánh dấu là chính xác, vì nó kết hợp nhiều hơn một ...? –