Имя метода, в котором перечислены все группы пользователей, членом которых является текущий пользователь. - PullRequest
0 голосов
/ 14 октября 2008

у нас была горячая дискуссия о названии метода.

У нас есть класс User. У пользователя есть свойство "Группы". Он содержит все группы, которые содержат пользователя напрямую. Это нормально. У нас проблема с именем метода, который будет рекурсивно перечислять все группы пользователей и их «родительские» группы и возвращать список всех групп, членом которых может считаться пользователь.

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);

Мои коллеги привезли:

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?

Какое имя вы бы предложили?

Ответы [ 9 ]

3 голосов
/ 14 октября 2008

В интересах высокой когезии и низкой связи , я бы предложил полностью исключить эту функциональность из вашего пользовательского класса. Также должно быть проще реализовать кэширование для нескольких вызовов, если эта функция была в другом классе.

Например:

User u = <get user>;
IList<UserGroup> groups = SecurityModel.Groups.getMembership(u);

Затем у вас есть возможность кэшировать членство в группах / пользователях в объекте Группы, что повышает эффективность будущих запросов на членство в группе для других пользователей.

1 голос
/ 31 октября 2008
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
            }
    }
}

Имеет ли что-нибудь из этого смысл? ; -)

1 голос
/ 14 октября 2008

Учитывая, что параметров нет, я предлагаю свойство, например

u.Groups;

или

u.UserGroups; // if Groups is ambiguous
1 голос
/ 14 октября 2008
u.GetGroups()

Если не было некоторой двусмысленности относительно значения групп в вашем приложении, я полагаю (я люблю печатать меньше, когда это возможно!)

1 голос
/ 14 октября 2008

Думаю, я бы выбрал:

u.GetGroupMembership()
0 голосов
/ 14 октября 2008

Роли плоские, нам нужно что-то более мощное. Мы также не хотим связываться с веб-средой.

0 голосов
/ 14 октября 2008

В зависимости от того, в какой среде вы, ребята, работаете, вы можете использовать существующие фреймворки для такого рода вещей, а не использовать свои собственные. Если вы используете .NET 2.0 или выше, я рекомендую использовать класс System.Web.Security.RoleProvider . У моего предыдущего ответа больше мыслей по этому поводу здесь .

0 голосов
/ 14 октября 2008

Я из команды Stej :-) У пользователя уже есть свойство "Группы". Он содержит все группы, которые содержат пользователя напрямую. Это нормально.

С чем мы сталкиваемся, это имя метода, который будет рекурсивно перечислять все группы пользователей и их «родительские» группы и возвращать список всех групп, членом которых пользователь может считаться.

0 голосов
/ 14 октября 2008

Я согласен с Грегом, но сделал бы это проще:

 u.GroupMembership();

Я думаю, что добавление глагола Get является бесполезным, учитывая тип возврата (Список групп)

...