Я занимаюсь разработкой программного обеспечения с открытым исходным кодом на JavaScript и создал несколько классов, которые реализуют различные функциональные возможности.
Хотя в настоящее время я не планирую наследовать от этих классов, я думаю помешать другим разработчикам в будущем сделать это, выдав ошибку (или, по крайней мере, предупреждение), если они это сделают.
Я прочитал (и также понял), что это может стать довольно неприятным, если кто-то расширит мой класс, и я затем изменю его функциональность, что приведет к разрушению подклассов, и что было бы лучше использовать композицию объектов вместо наследования.
У меня вопрос: с чего бы лучше иметь что-то подобное (композиция, как я понимаю):
class foo{
constructor(){}
doSomething(){
console.log('something');
}
}
class bar{
constructor(){
this.myFoo = new Foo();
}
doSomethingElse(){
myFoo.doSomething();
console.log('else');
}
}
чем то вроде этого (наследство):
class foo{
constructor(){}
doSomething(){
console.log('something');
}
}
class bar extends foo{
constructor(){}
doSomethingElse(){
super.doSomething();
console.log('else');
}
}
Я думаю, что изменение doSomething () сломало бы подкласс в любом случае.
Я что-то упустил, или thumbrule предпочитает композицию, а не наследование просто не применимо к моему делу?