0

次のドメインがあります。

Role は抽象クラスです。プログラマーは役割を拡張します。従業員には、プログラマー、マネージャーなどの複数の役割があります。

そのためのモデルを作成したいと思います。compositionこれを Employees エンティティでどのように指定できますか?

注: ロール テーブルに EmpID を追加できません。同じ役割が多くの従業員に適用されるためです。

現在のモデル

ここに画像の説明を入力

必要な概念モデルの疑似コード

public abstract class Role
{
    public abstract string RoleName { get; }
    public abstract int RoleID { get; }
}

public class ProgrammerRole : Role
{
    public override string RoleName { get { return "Programmer"; } }
    public override int RoleID { get { return 101; } }
}

public class ManagerRole : Role
{
    public override string RoleName { get { return "Manager"; } }
    public override int RoleID { get { return 102; } }
}


public class Employee
{
    private IList<Role> roles;
    public IList<Role> RolesList
    {
        get
        {
            return roles;
        }
    }


    public int EmployeeID { get; set; }

    //Constructor
    public Employee()
    {
        roles = new List<Role>();
    }

    public void TerminateEmployeeByRole(Role role)
    {
        if (RolesList == null)
        {
            //If employee has no role, make as inactive
            isActiveEmployee = false;
        }
        else
        {
            //If employee has no role other than the input role, make as inactive
            RolesList.Remove(role);
            if (RolesList.Count == 0)
           {
                isActiveEmployee = false;
            }
        }
    }

}
4

1 に答える 1

0

これは、より簡単な方法で実装できます。

public class Role
{
    public string RoleName { get; }
    public int RoleID { get; }
}

public class Employee
{
    public IList<int> RoleID { get; set; } // to store role id. This would form a table column
    [ForeignKey("RoleID")]
    public virtual IList<Role> RolesList { get; set; } // to reference Roles in the code. This will not for a table column

    public int EmployeeID { get; set; }

    //Constructor
    public Employee()
    {
        roles = new List<Role>();
    }

    public void TerminateEmployeeByRole(Role role)
    {
        if (RolesList == null)
        {
            //If employee has no role, make as inactive
            isActiveEmployee = false;
        }
        else
        {
            //If employee has no role other than the input role, make as inactive
            RolesList.Remove(role);
            if (RolesList.Count == 0)
            {
                isActiveEmployee = false;
            }
        }
    }
}

この設計の理由は、ロールを追加するとクラスを作成できなくなるためです。ラッパー クラスを作成して、データベースからロールの詳細を取得できます。

これを出発点として使用し、コピー アンド ペースト ソリューションとして使用しないでください。

于 2013-06-20T07:22:12.740 に答える