Это зависит от того, что вы моделируете. Учитывая приведенный выше пример, хотите ли вы найти члена команды, наиболее подходящего для данной проблемы?
Если это так, то я бы порекомендовал что-то вроде этого:
Представьте себе роли и навыки как вершины в неориентированном графе. Данная роль связана (через преимущество) с каждым навыком, на который она способна (при условии, что навыки определяются ролью, а не основаны только на личности). Теперь подключите всех членов команды к любой роли, которую они играют в команде, и членов команды к соответствующим командам.
Этот график теперь моделирует связи между вашими командами, членами команды, их ролями и навыками, которые они должны были дать своим ролям.
Теперь, чтобы сопоставить данную проблему члену команды (или даже команде), возьмите задачу и подключите ее к каждому из различных навыков, которые, по вашему мнению, понадобятся (например, электронная почта, БД, веб-интерфейс, веб-службы и т. Д.). .). Теперь вы можете связать проблемы и с этими сущностями.
Я не буду подробно останавливаться на каждом типе отчета, который вы можете запустить, но вот простой. Если вы хотите найти одного человека (если он существует), который мог бы решить эту проблему, я бы порекомендовал пересмотреть график следующим образом:
class Problem
{
find_problem_solvers()
{
var problem_solvers = null
for each (skill in skills_required)
{
var possible_problem_solvers = skill.find_problem_solvers()
if(problem_solvers == null)
{
problem_solvers = new list().add_range(possible_problem_solvers)
}
else
{
for each problem_solver in problem_solvers:
{
if(problem_solver not in possible_problem_solvers)
problem_solvers.remove(problem_solver)
}
}
//No point continuing if we eliminated everyone!
if(problem_solvers is empty) break;
}
return problem_solvers
}
}
Как вы можете видеть в этом отношении, я не особо пользуюсь образцами других постеров. Если вы пытаетесь смоделировать безопасность домена или какую-то другую бизнес-логику. Их методы вполне могут быть правильными.
Кстати, следует отметить, что приведенный выше алгоритм не является оптимальным.