Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对包含团队、角色和技能的结构建模是否存在设计模式?_Design Patterns_Oop_Modeling - Fatal编程技术网

Design patterns 对包含团队、角色和技能的结构建模是否存在设计模式?

Design patterns 对包含团队、角色和技能的结构建模是否存在设计模式?,design-patterns,oop,modeling,Design Patterns,Oop,Modeling,我需要建立一个系统模型,其中将有一个团队,该团队将由在团队中执行角色并拥有分配给他们的技能的用户组成 i、 e.团队a由5名成员组成,其中一名担任团队负责人,所有成员均负责回复 电子邮件角色,但有些人有接电话的额外技能 我正在努力确定如何最好地模拟这一点 这个问题以前一定已经解决了,有没有关于如何建模的好资源 编辑:我需要确定一个用户可以做什么,这可能是因为他们在某个团队中,扮演某个角色,或者被分配了某个技能,这不是我真正听说过的,但它足够简单,可以通过各种方式解决 所以有团队、成员、角色和技能

我需要建立一个系统模型,其中将有一个团队,该团队将由在团队中执行角色并拥有分配给他们的技能的用户组成

i、 e.团队a由5名成员组成,其中一名担任团队负责人,所有成员均负责回复 电子邮件角色,但有些人有接电话的额外技能

我正在努力确定如何最好地模拟这一点

这个问题以前一定已经解决了,有没有关于如何建模的好资源


编辑:我需要确定一个用户可以做什么,这可能是因为他们在某个团队中,扮演某个角色,或者被分配了某个技能,这不是我真正听说过的,但它足够简单,可以通过各种方式解决

所以有团队、成员、角色和技能。团队只是成员容器,成员具有角色和技能

这里有一个小的伪代码可以告诉你整个想法:

class Team
    container[Member] members

class Member
    container[Role] roles
    container[Skill] skills
然后,根据角色和技能的类型以及编程语言的功能,对其进行实例化或子类化


另一方面,在实践中,使团队级别类似于角色和技能级别是成员级别的属性可能是有意义的。如果您需要了解某个成员可以访问的内容。

我在谷歌上搜索了此内容,请恕我直言。我在角色建模和对象上发现了这一点。第30页有一个角色模式。希望这对你来说不是白费力气。以下是总结

角色模式允许您设计一个组件,该组件可以在运行时使用新的 上下文对象,称为角色。组件根据上下文使用角色进行扩展 对象模式。组件对应于装饰者的组件,角色对应于装饰者的组件 指向上下文对象。角色扮演组件的状态集成是通过应用 财产和战略。属性用于定义组件的状态空间,以及 策略用于提供依赖于属性的行为


听起来您可以在这里使用复合模式的变体,至少在部分问题上是这样。您可以从充当超类的Unit开始,然后您可以将团队作为Unit的子类。团队是一个可能包含其他单位的容器。此外,您还可以拥有用户子类单元。因此,您可以编写只针对单元的代码,并以相同的方式对待所有团队和用户。然后,您可以创建一些由其他团队组成的复杂团队

因此,您可以为您需要的每种类型的用户或团队提供一个类

如果角色数量急剧增加,并且最终导致类太多(类爆炸),那么可以应用装饰器模式。因此,您可以使用具有类似接口但功能不同(或附加)的另一个对象包装(装饰)对象


所以你可以有一个基本的客户和应答电话。以任何BasicUser对象为例,将其包装在AnswerPhoneDecorator中,您就有了一个可以接听电话的用户。

在您的示例中,我至少有TeamMember基类和2个接口(iEmail和iPhone)。任何新角色都将从TeamMember类继承,并根据其功能实现适当的接口。。。简言之,角色将被实现为从TeamMember继承的类,技能将被实现为接口

例如,允许组长打电话。然后我会让TeamLeader类继承TeamMember并实现iPhone接口


尽管我相信设计模式是一个很好的工具,但我不认为我会使用任何特定的模式来解决这个问题。相反,我会尝试从另一个角度来看待它。我建议使用一个数据库来存储关于您的团队、团队成员及其角色的数据。现在,数据库并不完全是我的强项,但我要试一试:
创建一个表格以容纳来自所有团队的所有团队成员。该表应具有以下属性:姓名、角色、团队、代表成员姓名和角色的技能、他/她所属的团队以及他/她的技能
现在,假设您的应用程序中有以下角色:RoleA(适用于那些可以接听电话和发送电子邮件的角色)、roleB(只能发送电子邮件)和role TeamLeader(例如,可以接听电话、发送电子邮件和参加会议)。 角色表将保存应用程序中的所有角色,属性将是(在本例中):名称(角色名称)、canAnswerPhone(布尔值表示具有此角色的用户是否可以接听电话)、can发送电子邮件(布尔值表示他/她是否可以发送电子邮件)等等……
例如,第三个表可以包含应用程序中的所有团队以及关于他们的各种数据(例如,团队正在处理的项目等)。
现在,你可以很容易地找到团队中的所有成员,他们可以做什么,改变他们的角色,看看谁是领导者,改变某个角色的工作,等等。。。


我希望这对您来说是有意义的。祝您在设计应用程序时好运!

这取决于您正在建模的内容。根据上面的示例,您是否希望能够找到最适合给定问题的团队成员

如果是这样的话,我建议如下: 将角色和技能想象为无向图中的顶点。给定的角色(通过边)链接到它能够使用的每个技能(假设技能是由角色提供的,而不仅仅是基于个人)。现在将所有团队成员连接到他们在团队中的任何角色,并将团队成员连接到适当的团队

现在,此图为您的团队、团队成员、他们的角色以及他们应该赋予角色的技能之间的关联建模

现在,要将一个给定的问题映射到一个团队成员(甚至团队),请将一个问题与您认为需要的每个不同技能联系起来(例如,Ema)
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
   }
 }