#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
.