Состав по наследству!
Часто разработчики смотрят на принципы, подобные SOLID, и забывают о базовом принципе Композиция над наследованием.
Первое, что нужно запомнить, это то, что наследование тесно связывает вас с базовым классом. Это приводит к таким проблемам, как отказ в завещании (нарушение принципа подстановки Лискова).
Когда мы говорим о классах в ООП, мы определяем поведение, связанное с данными, а не объектами. Когда мы моделируем проблему с точки зрения поведения, которое она пытается достичь, мы можем получить небольшие строительные блоки.
Вы можете определить поведение ядра из MyAwesomeViewModel в крошечные классы, которые вы можете ссылаться на него в других ваших классах. Таким образом, вы можете легко составлять объекты, такие как MyAwesomeViewModelWithBunchNewProperties .
Что касается принципа единой ответственности, то это очень неправильно истолкованный принцип. SRP заявляет, что совместное поведение должно изменяться вместе. Это означает, что один набор поведений, которые зависят друг от друга и будут меняться вместе, принадлежат к одному классу.
Что касается вашего конкретного сценария, модели представлений часто могут не иметь преимуществ от композиции или наследования. Модели представления - это объекты передачи данных (DTO), они не фиксируют поведение. Дублирование кода здесь может быть очень легко пропущено \ приемлемо. Если дублирование кода создает проблему в ваших моделях представлений, просто составьте их из других DTO