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