Sto provando a creare una nuova applicazione utilizzando il modello di repository per la prima volta e sono un po 'confuso sull'utilizzo di un repository. Supponiamo che abbia le seguenti classi:
public class Ticket
{
}
public class User
{
public List<Ticket>AssignedTickets { get; set; }
}
public class Group
{
public List<User> GroupMembers { get;set; }
public List<Ticket> GroupAssignedTickets { get;set; }
}
Ho bisogno di metodi che possano popolare queste raccolte recuperando i dati dal database.
Sono confuso su quale classe di repository associata dovrei inserire quei metodi. Devo progettare i miei repository in modo che tutto il ritorno di tipo T vada nel repository per il tipo T in quanto tale?
public class TicketRepository
{
public List<Ticket> GetTicketsForGroup(Group g) { }
public List<Ticket> GetTicketsForUser(User u) { }
}
public class UserRepository
{
public List<User> GetMembersForGroup(Group g) { }
}
L'ovvio inconveniente che vedo qui è che ho bisogno di avviare l'istanziazione di molti repository. Cosa succede se il mio utente ha assegnato anche widget, Fidgets e Lidgets? Quando popolino un utente, ho bisogno di creare un'istanza di un WidgetRepository, un FidgetRepository e un LidgetRepository per popolare un singolo utente.
In alternativa, costruisco il mio repository in modo che tutto requesting basato sul tipo T sia raggruppato nel repository per il tipo T come elencato di seguito?
public class GroupRepository
{
public List<Ticket> GetTickets(Group g) { }
public List<User> GetMembers(Group g) { }
}
public class UserRepository
{
public List<Ticket> GetTickets(User u) { }
}
Il vantaggio che vedo qui è che se ora ho bisogno che il mio utente abbia una raccolta di Widget, Fidgets e Lidgets, aggiungo semplicemente i metodi necessari al pattern UserRepository e non ho bisogno di creare un'istanza di un WidgetRepository, FidgetRepository, e LigetRepository class ogni volta che voglio creare un utente, ma ora ho sparpagliato le preoccupazioni per un utente attraverso diversi repository.
Non sono davvero sicuro di quale sia la strada giusta, se esiste. Qualche suggerimento?