Есть определенные опасения относительно вашей структуры наследования.Я не согласен с другими ответами, но я чувствую, что они отвлеклись на эти тангенциальные элементы.
Я пытаюсь ответить только на ваш прямой вопрос, на который вы уже ответили сами:
Наивный способ сделать это - реализовать сеттеры, которые идут и обновляют оба внутренних класса со значением, но что мы будем делать с геттерами?
Вы правыо проблеме получателя, но имейте в виду, что получатель не обязан существовать.Вы можете иметь свойства только для записи.Они редки, но у них есть цель.
Я также не уверен, что именно наивно в этом.Простые решения не плохие.Во всяком случае, простые решения лучше сложных, если им удается решить ту же проблему. KISS применяется:
Принцип KISS гласит, что большинство систем работают лучше, если их поддерживать простыми, а не усложненными;поэтому простота должна быть ключевой целью в дизайне, и ненужных сложностей следует избегать.
Обратите внимание на ненужные сложности.Если это необходимо, то это (по определению) служит цели.
var c = new C
{
A = new A(),
B = new B()
}
//this is ugly and what we want to avoid
c.A.DateCreated = DateTime.Now;
c.B.DateCreated = DateTime.Now;
Простое исправление заключается в создании пользовательского свойства в C
:
public class C
{
public DateTime DateCreated
{
set
{
this.A.DateCreated = value;
this.B.DateCreated = value;
}
}
}
Iопущен геттер, потому что это не имеет большого смысла (вы бы отобразили A.CreatedOn
или B.CreatedOn
)?
Но не стоит просто опускать геттер, так что это кажется лучшим подходом здесь.
Это создает желаемое поведение:
//sets both values
c.DateCreated = DateTime.Now;
Однако значения извлекаются отдельно:
var createdDateA = c.A.DateCreated;
var createdDateB = c.B.DateCreated;
Наивным способом сделать это было бы реализоватьсеттеры, которые идут и обновляют оба внутренних класса со значением, но что мы будем делать с геттерами?
Помимо моих предыдущих отзывов об этом, если вы действительно не любите свойства, доступные только для записи, вы можетев основном конвертировать их в метод.Функционально эквивалентный, но более явно не раскрывающий метод get:
public class C
{
public void SetDateCreated(DateTime value)
{
this.A.DateCreated = value;
this.B.DateCreated = value;
}
}
Кроме того, должен ли C наследоваться от InputBase, поскольку технически он является входом для службы?
Нет, если C не имеет своего собственного объекта Fee
, который работает точно так же, как другие производные InputBase
классы.
Этот вопрос немного широк;это зависит от наследования (и SOLID) в вашей кодовой базе.Это слишком большой вопрос для StackOverflow.Если вы можете перефразировать это к конкретному вопросу о структуре наследования, он может лучше подойти для SoftwareEngineering.SE (или, возможно, CodeReview.SE, если у вас есть рабочий код).