何をモデル化するかによります。上記の例から、特定の問題に最も適したチームメンバーを見つけたいですか?
その場合は、次のようなことをお勧めします。無向グラフの頂点としての役割とスキルを想像してください。与えられた役割は、(エッジを介して) それが可能な各スキルにリンクされています (スキルは役割によって与えられ、個人だけに基づくものではないと仮定します)。ここで、すべてのチーム メンバーをチームでの役割に関連付け、チーム メンバーを適切なチームに関連付けます。
このグラフは、チーム、チーム メンバー、彼らの役割、および彼らが彼らの役割に与えるべきスキルの間の関連付けをモデル化します。
与えられた問題をチーム メンバー (またはチーム) にマッピングするには、問題を取り上げて、必要と思われるさまざまなスキル (電子メール、DB、Web UI、Web サービスなど) のそれぞれに関連付けます。これらのエンティティにも問題を関連付けることができるようになりました。
これで実行できるすべてのタイプのレポートについては説明しませんが、簡単なものを次に示します。その問題を解決できる人物を 1 人 (存在する場合) 見つけたい場合は、次のようなグラフ トラバーサルをお勧めします。
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
}
}
この点でわかるように、他のポスターのパターンはあまり役に立ちません。ドメイン セキュリティまたは何らかの種類の別のビジネス ロジックをモデル化しようとしている場合。彼らの技術は正しいものである可能性が非常に高い.
ところで、上記のアルゴリズムは最適ではないことに注意してください。