我正在为 HR 系统开发系统。有会计员工和程序员员工。在加入公司的第一个月,员工没有被赋予任何角色。一名员工可以同时是会计师和程序员。我有以下代码所示的设计。
现在,我需要通过实现一个新功能来增强系统:
终止所有会计师。(终止意味着将员工的状态设置为 IsActive = false)。问题是我不能在不检查的情况下直接将所有会计师设置为不活动。我需要检查他是否有任何其他角色。
如何改造这些类以使终止功能更自然 OO ?
更新
我正在寻找具有 EF Database First 解决方案模型和 @AlexDev 答案的数据库架构的答案。
C# 代码
List<Accountant> allAccountants = Get All accountants from database
public class Employee
{
public int EmpID { get; set; }
public DateTime JoinedDate { get; set; }
public int Salary { get; set; }
public bool IsActive { get; set; }
}
public class Accountant : Employee
{
public Employee EmployeeData { get; set; }
}
public class Programmer : Employee
{
public Employee EmployeeData { get; set; }
}
@AlexDev 回答
public class Employee
{
...
IList<Role> Roles;
bool isActive;
public void TerminateRole(Role role)
{
Roles.Remove(role);
if(Roles.Count == 0)
{
isActive = false;
}
}
}
public class Role
{
abstract string Name { get;}
}
public class ProgrammerRole : Role
{
override string Name { get { return "Programmer"; } }
}
参考