Проблема в дизайне класса с множественной базовой моделью - PullRequest
0 голосов
/ 26 октября 2018

У меня есть базовый класс для всех СУБЪЕКТОВ моего проекта, который наследуется от модели ниже:

public class BaseModel
    {
        public int Id { get; set; }
        public int CreatedDate { get; set; }
        public override string ToString();
    }

Теперь у меня есть 1 другая функциональность, которая является общей для многих модулей, и я хочу сохранить BaseModelдля этой функциональности и хочу, чтобы она была унаследована от нее.

Public class BaseNotice
{
    // Common info related to notice which is use to send notice to employees in different scenarios
}

Теперь каждая наша модель должна наследоваться от BaseModel, поэтому наследование от BaseNotice будет множественным наследованием.

Теперь мне не нравитсяниже:

Public class BaseNotice : BaseModel
{
    // Common info related to notice which is use to send notice to employees in different scenarios
}

Поскольку я хотел бы контролировать функциональность, связанную с Уведомлением из модели BaseNotice, и для уведомления я хотел бы оставить BaseNotice в качестве базовой модели.

Но я не понимаю, какизбегайте множественного наследования здесь и так, как бы это было правильно для разработки этого?

1 Ответ

0 голосов
/ 26 октября 2018

Нет необходимости в множественном наследовании. Вы можете сделать это следующим образом:

public class BaseModel
{
    public int Id { get; set; }
    public int CreatedDate { get; set; }
    public override string ToString();
}

public interface IBaseNotice
{
   // Base Notices Contracts should be placed here
}

Public class BaseNotice: IBaseNotice
{
    // Common info related to notice which is use to send notice to employees in different scenarios
}


public class ModelX:BaseModel
{
    public IBaseNotice Notice { get ; set; } 
    public ModelX(IBaseNotice baseNotice) 
    {
        Notice = baseNotice;
    }
}

Или вы можете использовать второе поколение вашей базовой модели:

public class BaseModeNoticable:BaseModel
{
    public IBaseNotice Notice { get ; set; } 
    public BaseModeNoticable(IBaseNotice baseNotice) 
    {
        Notice = baseNotice;
    }
}
...