1

让我们用一个非常简单的例子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??

谢谢!

4

2 回答 2

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
    }
}
于 2011-07-07T21:45:20.513 回答
2

以使用类的想法运行,您可以使其通用:

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
{

}
于 2011-07-07T21:51:54.937 回答