При перемещении по слоям очень утомительно выполнять назначения справа налево как способ заполнения моделей.Например:
employeeViewModel.FirstName = employeeModel.FirstName;
employeeViewModel.LastName = employeeModel.LastName;
...
Итак, мы можем построить ModelCopier, который использует отражение для копирования моделей:
var employeeViewModel = ModelCopier.Copy<EmployeeViewModel>(employeeModel);
Этот метод значительно упрощает задачу.Тем не менее, есть несколько вещей, которые весьма беспокоят насчет этого:
- Мы фактически утратили способность отслеживать использование свойств в объектах источника и назначения.Например, поиск использования (в Resharper) свойства FirstName не выявляет случаи ModelCopier.
- Если мы изменим имя свойства в классе источника или назначения, мы можем непреднамеренно вызвать исключения времени выполнения, так как мы можемМы не понимаем, что нам нужно обновить как исходный, так и целевой класс.
На одном конце спектра мы можем использовать отражение, которое очень просто, но за счет ремонтопригодности.Противоположный конец спектра очень утомителен, но очень ремонтопригоден.
Отражение (легкое и опасное) <-----> Прямое назначение (утомительное и удобное в обслуживании)
Мне интересно, если кто-нибудь нашел компромисс, который предлагаетпростота использования отражения для копирования с возможностью сопровождения прямого назначения.
Одним из решений, которое мы развлекли, было создание плагина, который будет генерировать методы расширения, которые будут обрабатывать назначение свойств для каждого случая.Другими словами, создайте инструмент, который будет обрабатывать утомительную часть.
РЕДАКТИРОВАТЬ:
Пожалуйста, поймите, что этот вопрос не о том, какой инструмент отображения использовать.Я пытаюсь понять, как мы можем пользоваться преимуществами картографирования на основе отражений, а также преимуществами обслуживания, которое обеспечивается прямым назначением (или контрактом карты свойств).