オブジェクト志向という言語には、継承っていうものがあります。 共通処理を親に置いて、差分だけを子におけばいい、という考えですね。 便利ではあるのですが、一歩間違えるととんでもないことになったりしてしまうのですよ。 たとえばクラスAを継承したクラスB、クラスC、クラスDがあります。 んで、クラスBの処理を修正したくなりました。 で、修正する場所はクラスA側にもありました。 そのままクラスAを修正したらさあ大変、クラスCとクラスDが動かなくなってしまいました。 とまあ、こういう事はよくあるのです。 クラス継承に関わらず、共通関数とか共通ヘッダーとかそういうものでもよく起きる話。 モジュールの結合度をできるだけ低く、というのはこういう問題を避けるためのものなのですよね。 ってことで共通部分に置くのはモジュールごとで絶対同じでないといけないものにしましょ。 いわゆるdefineとかそんなやつですね。 それか基底クラスはあくまでabstractとして型だけ用意。実装は子供側でしましょう。
ただスクリプト言語のオブジェクト志向、いわゆるMVCだとこういう勝手がまた違うのが困り者。 すべてのコントローラーが同じところ継承するし。 そういう場合はミドルウェアとかコンポーネントとか、外部モジュールを使うといいかと。 結局のところ、なんでもかんでも共通化させればいいってものではないのです。