クラスなどの名付けで抽象的にするか具体的にするかで悩んだら

OperationServiceとするかSomeSpecificOperationServiceで悩んだらSomeSpecificOperationServiceを選びます。

ここって、確かに迷いがちなところですが、抽象度が高い名前をつけると責務が大きくなりすぎる傾向が強いので、具体的な名前をつけるほうが私は好みです。

  1. 具体的な名前をつける
  2. いろんな実装を進める上で他にもやらせたいことが増えてきて名前が不適切になる
  3. (1)で作ったクラス名を適切なものに改名するか、(それが思いつかなければ?)具体的な別の名前のサービスを定義するか考える

みたいな順番で考えることが多いです。

これも制約を強めるか弱めるかの選択肢の話に通じるものがあるのですが、

より具体的な名前 ⇒(用途の)制約が強い より抽象的な名前 ⇒(用途の)制約が弱い

と、私は考えています。

制約が弱いものを強めるのは後からやり辛いので、その2択で結果に大差がなさそうなら制約が強い方を選択するという原則(自分でかってに言ってるだけのやつ)に従って、より具体的な名前をつけておく、という選択になる感じです。