Je constate que le code que j'écris dans mes contrôleurs est largement répétitif, et surtout que les tests que j'écris pour mes contrôleurs sont également très répétitifs. Le schéma général d'une méthode de sauvegarde est le suivant...
Prenez une entité, et un certain nombre de paramètres primitifs. Ecrire les valeurs des paramètres primitifs sur les mêmes paramètres nommés de mon entité. Valider l'entité. Sauvegarder l'entité si elle est valide.
J'ai déjà un modèle de liaison qui lie tout ce qui hérite de IDataEntity (une interface que toutes nos entités persistantes dans la base de données mettent en œuvre). Ce liant de modèle trouve le référentiel approprié et recherche l'entité avec l'identifiant passé.
J'ai envisagé d'ajouter une extension à ce modèle de classeur qui tirera également les valeurs du fournisseur de valeurs et les écrira par-dessus les valeurs existantes. Cela m'épargnera du code répétitif dans mes actions d'assignation de valeurs à mes entités. Et cela me permettra également de ne passer que des entités à mes tests de contrôleur plutôt qu'un grand nombre de valeurs.
par exemple une méthode qui ressemble actuellement à ceci :
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);
}
}
Sa longueur serait réduite de moitié et presque tous ses arguments seraient supprimés. Cela semble certainement attrayant car la quantité de code que nous écrivons est réduite, et une validation de test à test peut passer un fournisseur de validation fictif et une adresse par défaut et ne pas s'inquiéter de la définition de tous ces paramètres, mais je crains qu'il y ait un peu trop de magie en coulisse pour que ce soit une bonne idée.
Réflexions ? Opnions ? Des idées ?