Dans le monde réel, les contrôleurs peuvent potentiellement avoir besoin d'utiliser des données provenant de diverses tables de base de données et d'autres magasins de données. Par exemple :
[Authorize]
public class MembersController : Controller
{
ICourseRepository repCourse;
IUserCourseRepository repUserCourse;
IMember member;
public MembersController(ICourseRepository repCourse, IUserCourseRepository repUserCourse, IMember member)
{
this.repCourse = repCourse;
this.repUserCourse = repUserCourse;
this.member = member;
}
Donc :
-
Dois-je utiliser un référentiel pour chaque table ?
-
Je suppose que c'est là que le concept d'agrégats entre en jeu ? Devrais-je avoir un référentiel par agrégat ?
-
Dois-je simplement ajouter autant de dépôts que nécessaire au constructeur du contrôleur ?
-
Est-ce un signe que ma conception est mauvaise ?
NOTE :
L'interface IMember représente essentiellement un objet d'aide qui donne un visage agréable au fournisseur d'adhésion. En d'autres termes, elle regroupe tout le code en un seul endroit. Par exemple :
Guid userId;
public Guid UserId
{
get
{
if (userId == null)
{
try
{
userId = (Guid) Membership.GetUser().ProviderUserKey;
}
catch { }
}
return userId;
}
}
Le problème qui se pose est certainement la mise en cache de ce type de résultats. Je sens qu'une autre question arrive.
EDIT :
J'utilise Ninject pour le DI et je suis assez convaincu par tout ce qui est DI, DDD et TDD. Enfin, en quelque sorte. J'essaie aussi d'être un pragmatique...