Я занимаюсь рефакторингом и столкнулся с контрольно-пропускным пунктом.
Справочная информация:
У меня есть базовый класс и несколько унаследованных производных классов. Производные классы не всегда должны иметь одинаковые свойства. Если какие-либо свойства являются общими для производных классов, эти свойства будут жить на уровне базового класса (например, ' Contents ').
Аналогично, нижеприведенный GoodDocument имеет ' GoodThings ', но не хочет / не должен иметь ' BadThings '.
Я хочу обрабатывать экземпляры ' GoodDocument ' и ' BadDocument ' как тип ' Документ '
public mustinherit class Document
public property Contents as string
public sub new()...
end class
public class GoodDocument
inherits Document
public property GoodThings as string
public sub new()...
end class
public class BadDocument
inherits Document
public property BadThings as string
public sub new()...
end class
Класс ' DocumentWriter ' также будет иметь несколько производных классов: (' GoodDocumentWriter ' и ' BadDocumentWriter ').
Мне нужно передать DocumentWriter.Doc как «Документ» ряду других мест в коде. Doc.GoodThings вызывается только из экземпляра GoodDocument или GoodDocumentWriter.
public mustinherit class DocumentWriter
public property Doc as Document
public sub new()...
end class
public class GoodDocumentWriter
inherits DocumentWriter
public sub new
mybase.Doc = new GoodDocument
end sub
end class
public class BadDocumentWriter
inherits DocumentWriter
public sub new
mybase.Doc = new BadDocument
end sub
end class
Вопрос:
Существует ли шаблон проектирования, который позволяет производным классам иметь членов, которых не существует на уровне базового класса?
Должны ли все свойства жить на уровне базового класса?
Пересмотренный
Я пытался быть кратким с моим первоначальным вопросом, и я сделал ошибку, упрощая ситуацию. Короче говоря, я понял, что должно быть возможно иметь разные свойства для каждого из производных классов. (Я напечатал это в издевательстве и не хотел оставлять это в последнем посте).
Теперь я понимаю, что проблема, с которой я столкнулся, была действительно симптомом более масштабной проблемы, которую нужно было решить.
Похоже, что я сталкивался с жалобами компилятора, которые можно было исправить путем дальнейшего рефакторинга и более слабой связи. В то время как другие ответили на основной вопрос, который я поставил, пример Райана Гросса действительно помог начать некоторые новые идеи.
Спасибо!