Nome del metodo che elenca tutti i gruppi di utenti di cui l'utente corrente è membro
-
03-07-2019 - |
Domanda
abbiamo avuto una discussione accesa sul nome di un metodo.
Abbiamo un utente
di classe. C'è una proprietà chiamata " Gruppi " sull'utente. Contiene tutti i gruppi che contengono direttamente l'utente. Va bene. Ciò di cui abbiamo problemi è il nome del metodo che elenca ricorsivamente tutti i gruppi di utenti e i loro "genitori" gruppi e elenco di restituzione di tutti i gruppi, di cui l'utente può essere considerato membro.
User u = <get user>;
IList<UserGroup> groups = u.XYZ();
Console.WriteLine("User {0} is member of: ", u);
foreach(UserGroup g in groups)
Console.WriteLine("{0}", g);
I miei colleghi hanno portato:
u.GetAllGroups(); // what groups?
u.GetMemberOfGroups(); // doesn't make sense
u.GroupsIAmMemberOf(); // long
u.MemberOf(); // short, but the description is wrong
u.GetRolesForUser(); // we don't work with roles, so GetGroupsForUser ?
u.GetOccupiedGroups(); // is the meaning correct?
Quale nome proporresti?
Soluzione
Sono d'accordo con Greg, ma lo renderei più semplice:
u.GroupMembership();
Penso che aggiungere il verbo Get sia un po 'inutile, dato il tipo restituito (Elenco dei gruppi)
Altri suggerimenti
Nell'interesse di alta coesione e basso accoppiamento , suggerirei di mantenere quella funzionalità completamente fuori dalla tua classe utente. Dovrebbe inoltre essere più semplice implementare la memorizzazione nella cache per più chiamate se tale funzionalità era in una classe diversa.
Ad esempio:
User u = <get user>;
IList<UserGroup> groups = SecurityModel.Groups.getMembership(u);
Hai quindi la possibilità di memorizzare nella cache l'appartenenza al gruppo / utente nell'oggetto Gruppi, migliorando l'efficienza per future richieste di appartenenza al gruppo per altri utenti.
Penso che sceglierei:
u.GetGroupMembership()
u.GetGroups()
a meno che non ci fosse qualche ambiguità sul significato dei gruppi nella tua applicazione, suppongo. (mi piace digitare meno quando possibile!)
Dato che non ci sono parametri, suggerisco una proprietà, ad esempio
u.Groups;
o
u.UserGroups; // if Groups is ambiguous
if (the signature of the property Groups cannot be changed)
{
I think you are screwed
and the best thing I can think of
is another property named AllGroups
// u.Groups and u.GetWhatever() look very inconsistently
}
else
{
if (you are okay with using the term "group")
{
I would select one of these variants:
{
a pair of properties named ParentGroups and AncestorGroups
}
or
{
a parameterized method or property Groups(Level)
where Level can be either PARENTS (default) or ANCESTORS
}
}
else
{
I would consider replacing "group" with "membership"
and then I would select one of these variants:
{
a pair of properties named DirectMemberships and AllMemberships
}
or
{
a parameterized method or property Memberships(Level)
where Level can be either DIRECT_ONLY (default) or ALL
}
}
}
Qualcuno di questi ha senso? ; -)
Vengo dal team di Stej :-) Esiste già una proprietà chiamata " Gruppi " sull'utente. Contiene tutti i gruppi che contengono direttamente l'utente. Va bene.
Ciò con cui abbiamo problemi, è il nome del metodo che elenca ricorsivamente tutti i gruppi di utenti e i loro "genitori" gruppi e elenco di restituzione di tutti i gruppi, di cui l'utente può essere considerato membro.
A seconda dell'ambiente in cui state lavorando, potreste essere in grado di sfruttare i framework esistenti per questo tipo di cose piuttosto che creare il vostro. Se si utilizza .NET 2.0 o versione successiva, suggerirei di utilizzare System.Web.Security.RoleProvider classe. Una mia precedente risposta ha più riflessioni su questo qui .
I ruoli sono piatti, abbiamo bisogno di qualcosa di più potente. Non vogliamo neanche essere legati all'ambiente web.