У меня есть вопрос относительно лучшего способа структурирования кода для повторного использования с наследованием в тех случаях, когда некоторые методы в базовом классе не имеют смысла в классе наследования. Я думаю, что это общая OOP проблема, а не только особенность, связанная с TypeScript ...
Так что в принципе в некоторой форме псевдокода проблема похожа на эту:
class BaseClass делаетSenseForA делает SsenseForA .... не делаетMenseSenseForA не делает MenseSenseForA ....
Как тогда иметь Class A
наследовать BaseClass
. Просто прямое наследование означает, что Class A
будет иметь методы-члены, которые на самом деле не имеют смысла.
Не использование наследования означает, что код будет дублирован как в BaseClass
, так и Class A
* 1015. * Перемещение
makesSenseForA
методов во внешний класс с обоими
BaseClass
и его дочерним классом зависит от этого извлеченного класса (ie с использованием композиции), не работает в этом конкретном сценарии, потому что извлеченный класс должен фактически рассматриваться как A
BaseClass
.
Как лучше всего справиться с такой OOP ситуацией моделирования?
РЕДАКТИРОВАТЬ: из-за отсутствия лучшего примера это все равно, что пытаться смоделировать Human
и Cyborg
- эти два разделяют тонну загрузок аналогичной реализации, и, следовательно, первая мысль может состоять в том, чтобы иметь Cyborg
extends Human
...
Но также будет тонна реализации, которая Human
имеет то, что Cyborg
не должно иметь.
Отказ от наследования означает, что аналогичные функциональные возможности придется дублировать в Human
и Cyborg`.
И композиция также не работает, потому что если вы извлекаете те реализации, которые похожи, в отдельный объект, этот объект и его метод будут иметь свойство Human
, и, следовательно, должны быть замеченным как Human
в нашем моделировании.