Užití repository v řadičích
|
Dost už bylo infrastruktury, pojďme si ji trochu užít! :) Dneska si ukážeme jak používat naší infrastrukturu, která by nám měla spoustu věcí usnadnit. Proto jí vlastně tady tvořím.
Dependency injection a bindování modelu
Vytvoříme si řadič, který bude pracovat řekněme s uživateli – to je taková věc, která je nutná snad v každé aplikaci. Ruku na srdce, aplikace bez uživatelů je tak trochu k ničemu. Tak pojďme na to!
[HandleErrors]
public class UsersController : System.Web.Mvc.Controller {
private IUsersRepository _usersRepository;
public UsersController(IUsersRepository usersRepository) {
_usersRepository = usersRepository;
}
[ActionName("Rest")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection forms) {
var user = new User();
if (ModelState.IsValid == false) {
throw new ValidationException();
}
UpdateModel(user, forms.ToValueProvider());
_usersRepository.Save(user);
return Json(user);
}
}
Krátké a úderné. Jde o klasický řadič, který má závislost na repository uživatelů. Tuto závislost si nechává nainjektovat přes konstruktor. O její životní cyklus se nestará, to řeší IoC kontejner. Pak tu máme akci, která zpracovává POST dotazy řekněme na URL /Users
, to teď není podstatné. Tato akce by měla vytvořit nového uživatele z dat, která přišla v POSTu (FormCollection
).
Pokud nejsou data v pořádku, tak vyhodíme validační výjimku. O to, jak se tato data mapují na model uživatele, se opět řadič nestará, to je věc model binderu. Pokračujeme dále k uložení uživatele, někam. Kam a jakým způsobem je řadiči opět šumák, to je starost repository. Nakonec pošleme zpátky hotového uživatele jako JSON objekt.
A to je pro dnešek vše… :)