наследование и роли - PullRequest
       6

наследование и роли

1 голос
/ 08 июля 2011

Давайте рассмотрим простой пример с 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 ??

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Работая с идеей использования класса, вы можете сделать его общим:

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
{

}
2 голосов
/ 08 июля 2011

Используйте отношение 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
    }
}
...