人事システム用に開発中のシステムがあります。Accountant の従業員と Programmer の従業員がいます。入社して最初の 1 か月間は、従業員は何の役割も与えられません。1 人の従業員が同時に会計士とプログラマーになることができます。次のコードで示されるデザインがあります。
ここで、新しい機能を実装してシステムを強化する必要があります。
すべての会計士を終了します。(終了とは、従業員のステータスを IsActive = false として設定することを意味します)。問題は、確認せずにすべての会計士を非アクティブとして直接設定できないことです。彼が他の役割を持っているかどうかを確認する必要があります。
終了機能をより自然な OO にするために、これらのクラスを改造する方法は?
アップデート
@AlexDev回答のEF Database Firstソリューションモデルとデータベーススキーマを持つ回答を探しています。
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"; } }
}
参照