继承和角色
本文关键字:角色 继承 | 更新日期: 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
{
}