Khi di chuyển ngang qua các lớp, nó rất tẻ nhạt để thực hiện đúng-> các bài tập trái như một cách để điền các mô hình. Ví dụ:Sao chép các mô hình giữa các lớp
employeeViewModel.FirstName = employeeModel.FirstName;
employeeViewModel.LastName = employeeModel.LastName;
...
Vì vậy, chúng ta có thể xây dựng một ModelCopier trong đó sử dụng phản ánh để sao chép mô hình:
var employeeViewModel = ModelCopier.Copy<EmployeeViewModel>(employeeModel);
Kỹ thuật này rất đơn giản hoá công việc. Tuy nhiên, có một vài điều khá đáng lo ngại về điều này:
- Chúng tôi đã mất khả năng theo dõi việc sử dụng các thuộc tính trên đối tượng nguồn và đích. Ví dụ, việc tìm kiếm các tập quán (trong Resharper) của thuộc tính FirstName không tiết lộ các trường hợp ModelCopier.
- Nếu chúng tôi thay đổi tên của thuộc tính trên lớp nguồn hoặc đích, chúng tôi vô tình có thể gây ra ngoại lệ thời gian chạy vì chúng tôi có thể không nhận ra rằng chúng tôi cần cập nhật cả lớp nguồn và đích.
Trên một đầu của quang phổ, chúng tôi có thể sử dụng sự phản chiếu rất dễ dàng, nhưng với chi phí bảo trì. Sự kết thúc ngược lại của quang phổ rất tẻ nhạt nhưng rất dễ bảo trì.
Reflection (Dễ dàng và nguy hiểm) < -----> Chuyển nhượng trực tiếp (tẻ nhạt và dễ bảo trì)
tôi tò mò nếu có ai đã tìm ra một thỏa hiệp mà cung cấp sự dễ dàng của việc sử dụng phản ánh để sao chép với khả năng bảo trì của nhiệm vụ trực tiếp.
Một giải pháp mà chúng tôi đã giải trí là xây dựng một plugin sẽ tạo ra các phương pháp mở rộng xử lý việc gán thuộc tính cho từng trường hợp. Nói cách khác, xây dựng một công cụ sẽ xử lý phần tẻ nhạt.
EDIT:
Hãy hiểu rằng câu hỏi này không phải là về những công cụ lập bản đồ để sử dụng. Tôi đang cố gắng hiểu cách chúng ta có thể tận hưởng những lợi ích của ánh xạ dựa trên sự phản chiếu trong khi cũng tận hưởng những lợi ích của tính bảo trì được cung cấp bởi sự phân công trực tiếp (hoặc hợp đồng bản đồ tài sản).
@themarcuz - Tôi đồng ý, một loạt các bài kiểm tra đơn vị sẽ bắt được vấn đề. Trong khi thảo luận về vấn đề này, chúng tôi đã đưa vấn đề này lên và điều gây khó chịu chính là nó phụ thuộc vào việc kiểm tra đơn vị đang được thực hiện. Có lẽ câu trả lời tốt nhất là đảm bảo chúng tôi có các bài kiểm tra đơn vị kiểm tra rõ ràng hoạt động lập bản đồ. Nó vẫn sẽ là tốt đẹp nếu chúng ta có thể bắt vấn đề tại thời gian biên dịch. –
@Page Brooks - Theo định nghĩa trình biên dịch chạy qua mã bạn đã viết. Vì vậy, cách duy nhất để cho nó thực hiện kiểm tra bạn cần là viết mã (bằng tay hoặc với một plug-in VS như bạn đã nêu trước đó). Không có lựa chọn nào khác: - bạn muốn kiểm tra mã tại thời gian biên dịch -> bạn viết mã (đó là những gì bạn muốn tránh) - bạn muốn tránh viết mã -> bạn kiểm tra chức năng kiểm tra trình biên dịch (nhưng bạn không muốn điều này nữa) Nhưng những gì bạn phải đạt được là để tránh một số bản cập nhật kích hoạt lỗi trong thời gian chạy: cải thiện hành vi thử nghiệm của nhóm của bạn là cách tốt nhất, IMHO – themarcuz
Craig Lairman sugest để check-in mọi 30 phút ... nhưng hãy nói một giờ ... và bạn phải chạy tất cả bài kiểm tra trước khi đăng ký. Vì vậy, không có quá nhiều chỗ cho loại lỗi đó. Tôi biết rằng đó không phải là chứng minh của khỉ như trình biên dịch, nhưng đó là giải pháp tốt nhất – themarcuz