继承和角色

时间:2011-07-07 21:42:23

标签: c# oop design-patterns inheritance role

让我们使用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 ??

不支持泛型

谢谢!

2 个答案:

答案 0 :(得分:2)

使用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
    }
}

答案 1 :(得分:2)

运行使用类的想法,你可以使它通用:

abstract class EmployeeRole { } 

interface EmployeeRole { }

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

class CEO : EmployeeRole { }

class SalesMgr : EmployeeRole { }

class Employee<T> where T : EmployeeRole
{

}

然后有一个通用的Factory实现:

public Employee<T> MakeEmployee<T>() where T : EmployeeRole
{

}