Nome del metodo che elenca tutti i gruppi di utenti di cui l'utente corrente è membro

StackOverflow https://stackoverflow.com/questions/200286

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top