基于角色创建类

本文关键字:创建 角色 于角色 | 更新日期: 2023-09-27 18:16:31

我正在开发一个体育俱乐部管理的应用程序。我的问题是,我有一个主类Member,它包含所有的"默认"信息(姓名,姓氏,性别……)和另外两个类CoachPractitioner继承自Member。教练有一些特定的属性(工资,本月进行的培训…),而从业者有一些其他属性(isCompetitor, category…)

问题是,一个从业者也可以是一个培训师,或者反过来。我如何将其建模为更好的东西,然后为同一个人提供两个条目?

编辑:这是现在的样子

Class Member {}
Class Coach:Member {}
Class Practitioner:Member {}

基于角色创建类

您可以创建一个包含角色列表的类'成员'。每个角色(教练和/或从业者)都继承自一个基类role,其中包含了你现在在成员类中拥有的所有属性。教练和实践者比有各自特定的属性。所以:

public class Member {
    public IList<Role> Roles { get; private set; }
    public Member(){
        Roles = new List<Role>();
    }
}
public class Role {
    public string SomeGlobalProperty { get; set; }
}
public class Coach : Role {
    public string SomeSpecificProperty { get; set; }
}
public class Practitioner : Role {
    public string SomeSpecificProperty { get; set; }
}

如果你一次只以一种方式看待他们——比如作为一组从业者中的一员,或者作为一组培训师中的一员——那么你可以将他们创建为每次被视为特定类型的成员。如果需要,您可以给从业者添加一个布尔属性"isfilter",给trainer添加一个"IsPractitioner",以表明在其他地方有关于这个人的更多信息。

这是假设你一次只从一种方式看他们,而不是得到一个关于这个人的所有信息的页面。

简单:意识到你基本上需要阅读一本关于OOP的入门书。

一个成员就是一个成员(即使这是有争议的——实际上它是一个缔约方,不管它做什么)。

它有不同的角色,这些角色基本上是角色的集合,所有角色都有开始和结束日期。

Party
  CoachInformation
  PractitionerInformation

等。

我建议阅读"The Data Model Resource Book"第1卷,其中非常详细地介绍了这个标准问题以及大多数人是如何误解它的。