Совместное использование общих свойств с дочерними объектами

#c# #design-patterns

#c# #шаблоны проектирования

Вопрос:

Я почти уверен, что это простой вопрос, но сейчас я застрял. У меня есть следующая настройка:

 public ParentClass()
{
    public long ID { get; set; }
    public String Title { get; set; }
    public String PropertyA { get; set; }
    public String PropertyB { get; set; }

    public ParentClass()
    {
        _child1 = new ChildClass1();
        _child1.ID = ID;
        _child1.Title = Title;
        _child1.PropertyA = PropertyA;

        _child2 = new ChildClass2();
        _child2.ID = ID;
        _child2.Title = Title;
        _child1.PropertyB = PropertyB;
    }

    private ChildClass1 _child1;
    private ChildClass2 _child2;
}
  

Родительский класс предназначен только для управления общим поведением, дочерние классы выполняют фактическую работу (каждая отдельная часть). Я хочу, чтобы оба дочерних класса знали идентификатор и название. Но дочерний элемент1 должен знать только PropertyA, в то время как дочерний Элемент2 должен знать PropertyB . Таким образом, каждый дочерний элемент будет иметь результирующие 3 свойства. Я мог бы использовать некоторые объекты данных, но это привело бы к вызовам типа _child1.Properties.ID …
Есть ли лучшая практика или шаблон для решения такого рода проблем?

Комментарии:

1. Каков реальный вариант использования здесь? Вопрос о том, как передавать данные, Parent -> Child является довольно субъективным вопросом.

2. Ваши свойства — это поля. Не помогает в попытке понять это.

3. Parentclass создает элемент управления, который состоит из 2 подконтролей (элемент выбора и список). Родительский класс синхронизирует данные между элементом выбора и списком. Таким образом, один дочерний элемент представляет элемент выбора, а другой — список.

4. Опубликованный код, похоже, выполняет свою работу, так в чем же здесь вопрос?

5. Я согласен с Джеймсом. Бросается в глаза то, что PropertyB и A (которое, кстати, является полем) дублируются в parent, когда вы не могли бы беспокоиться (просто используйте getter, который проверяет дочерний элемент, например). В общем, как и в случае с ID, вы должны хранить их отдельно. вы можете изменить получатели и установщики, чтобы они были тесно связаны, а не надеялись, что они останутся прежними.

Ответ №1:

Ваш код кажется прекрасным. Не нужно усложнять вещи.

Мне кажется, что PropertyA и PropertyB не могут иметь резервного значения для этих свойств в ParentClass и просто получают и устанавливают общедоступные свойства в дочерних классах.

В общем, может быть лучше тесно связать их, чтобы геттеры в родительском элементе влияли на значения в дочерних классах и наоборот, если вы ожидаете, что они не будут расходиться в течение их жизненного цикла. Альтернативой было бы иметь их все как readonly .