让我们使用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
??
谢谢!
答案 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
{
}