Многие мои классы в конечном итоге нуждаются в функциях конвертирования.
- DataRow -> Конвертеры объектов
- ViewModel <-> Конвертеры моделей
У меня вопрос, где должны жить функции?
Вариант 1: Внутри исходного класса
public class Employee
{
public EmployeeViewModel ToViewModel() {}
}
var vm = myEmployee.ToViewModel()
Вариант 2: Внутри класса назначения
public class EmployeeViewModel
{
public static EmployeeViewMOdel FromModel() {}
}
var vm = EmployeeViewModel.FromModel(myEmployee);
Вариант 3: Внутри преобразователя
public class EmployeeModelViewModelConverter
{
public static EmployeeViewModel ConvertToViewModel(Employee) {}
}
var vm = new EmployeeModelViewModelConverter.ConvertToViewModel(myEmployee);
Вариант 3 представляется наиболее чистым за счет того, что вокруг лежат тонны классов преобразователей и тонны статических функций или тонны инициализации / впрыска IOC. Он также имеет самый уродливый синтаксис, или вам нужно добавить еще один класс, используя расширения.
Пояснение: Я говорю не только о классах ViewModel / Model, но обо всем, что вам нужно для преобразования одного класса в другой. В качестве другого примера, у меня есть система рендеринга, в которой объекты часто нужно преобразовать в рендеринг примитивов.