继承和角色

本文关键字:角色 继承 | 更新日期: 2023-09-27 18:01:25

让我们使用一个非常简单的employees and company(-ies)示例。

public abstract class Employee
{
    // bunch of its features
}
public sealed class SalesManager : Employee
{
}
public sealed class SEO : Employee
{
}

员工可以担任不同的职位或扮演不同的角色。因此,使用继承(可能还有工厂模式)并不能给concrete employee instance提供改变其角色的灵活性。

你有什么建议,不幸的是我还没有看到这种方法。我还没见过一本书能阐明这个问题。

编辑

谢谢大家!在我的编辑中,我想再问一个问题。使用generic role可以将这样的BLL转移到DAL。我听说在Entity Framework中不支持泛型??

谢谢!

继承和角色

使用has-a关系

public class Employee 
{
    public Role EmployeeRole { get; set; }
}
public enum Role 
{
    SalesManager,
    SalesPerson
}

或者您可以使Role成为一个类,以存储除了角色名称之外的其他信息。

public class Role
{
    public string Name { get; set; }
    public decimal BaseSalary { get; set; }
}

为了说明@Aasmund Eldhuset的评论:

public abstract class Role
{
    public string Name { get; set; }
    public decimal BaseSalary { get; set; }
    public abstract void PerformRole();
}
public class SalesPerson : Role
{
    public void PerformRole()
    {
        // Do something
    }
}

按照使用类的想法,您可以使其泛型:

abstract class EmployeeRole { } 

interface EmployeeRole { }

并从这个抽象继承不同的类型:

class CEO : EmployeeRole { }
class SalesMgr : EmployeeRole { }
class Employee<T> where T : EmployeeRole
{
}
然后有一个通用的工厂实现:
public Employee<T> MakeEmployee<T>() where T : EmployeeRole
{
}