Re: Template Methodパターン
元となるコードを見てないので、対象コードでの Template Methodパターン適用の是非は分かりません。が、オレはよく使いますよ>Template Methodパターン。
サブクラスA、Bのアルゴリズムが似てるけど微妙に違うなんて場合は、ベースとなるアルゴリズムをスーパークラスへまとめておいて差異の部分を各サブクラスで実装、みたいな。
これによって、似たようなアルゴリズムを繰り返し書かない、DRY原則を守れます。
それと。
何か仕様を拡張したくてもスーパークラスの仕様に縛られて柔軟性を書いてしまうし、スーパークラスを作るのに将来の拡張性を考慮するのは YAGNI原則に反する。
みたいな状況は確かにイヤですね。オレが同じ状況に陥ったら、スーパークラスのテンプレート部をガシガシとリファクタリングしちゃいますねー。あと、スーパークラスのテンプレート部を作るときは将来の拡張のことなど考えないことが多いです。あくまでも、その時点での、アルゴリズムのまとめ上げだけが目的で。