Я обнаружил, что код, который я пишу на своих контроллерах, в значительной степени повторяется, и что более важно, тесты, которые я пишу для своих контроллеров, также очень повторяющиеся. Общая схема метода сохранения выглядит следующим образом ...
Возьмите сущность и ряд примитивных параметров. Запишите значения из примитивных параметров в те же именованные параметры в моей сущности. Подтвердите сущность. Сохраните объект, если он действителен.
У меня уже есть связыватель модели, который будет связывать все, что унаследовано от IDataEntity (интерфейс, который реализуют все персистентные сущности нашей базы данных). Этот механизм связывания находит соответствующий репозиторий и ищет сущность с переданным идентификатором.
Я рассматривал возможность добавления расширения к этой модели связующего, которое также будет извлекать значения из поставщика значений и записывать их поверх существующих значений. Это сэкономит мне некоторый повторяющийся код в моих действиях, присваивая значения моим сущностям. И также позволит мне просто передавать сущности в тесты моего контроллера, а не большое количество значений.
например, метод, который в настоящее время выглядит следующим образом:
public ActionResult SaveCompanyAddress(Address address,
string address1,
string address2,
string address3,
string city,
string county,
Country country,
string postcode)
{
address.Address1 = address1;
address.Address2 = address2;
address.Address3 = address3;
address.City = city;
address.County = county;
address.Country = country;
address.Postcode = postcode;
Validate(address);
if (ModelState.IsValid)
{
using (var tran = TransactionFactory.CreateTransaction())
{
addressRepository.Save(entity);
tran.Commit();
}
return this.RedirectToAction(x => x.List(address.Company));
}
else
{
return View("Edit", address);
}
}
Длина будет уменьшена вдвое и будут удалены почти все аргументы. Это, безусловно, звучит привлекательно, так как объем кода, который мы пишем, уменьшается, и тест для проверки валидации может пройти фиктивный провайдер валидации и адрес по умолчанию и не беспокоиться об установке всех этих параметров. но я беспокоюсь, что за кулисами может быть слишком много магии, чтобы сделать ее хорошей идеей.
Мысли? Opnions? Идеи?