はじめに
超初心者も超が取れてきた時期になってきました。とりわけ最近は業務で複雑な処理を読み書きする機会が増えてきました。
そんな矢先であったのがこんなメソッドです。
private function addCreateNotChangeAppliedData(array $applyData): array
思わず 吐き気 寒気がしました。
この記事では、このメソッド名の
- 何が問題なのか?
- どう解決すべきなのか?
- 最適な考え方は?
という点を初心者なりに考察してみます。
業務情報のため、内容をぼかしつつメソッドの中身についてまでは載せられませんことをご容赦ください。
問題点
【前提】処理について
そもそもこの処理は、業務の複雑性が生んだメソッドです。日本語でわかりやすく処理を要約すると、原稿の追加申請時、以前までの申請中データのうち今回変更対象でない物をDBから取得という処理です。
わけが分かりませんね。
もう少し噛み砕いていきましょう。
前提:一つのIDの下に紐づいてグループがいくつかある。今回はID1,グループ1,2,3という想定。
- ID1のあるグループ1において原稿の追加申請が来る
- ここでは申請対象ではない、グループ2,3のすでに申請中の情報を取得
という流れです。
つまり、メソッド名を分解すると、
- add → 追加申請のこと
- Create → 取得するよということ
- NotChange → 申請対象でないという意味
- AppliedData → (申請対象ではないなかの)申請中の情報
ということになるかと考えられます。
問題点
まず最初に私がこのメソッドを拝見して感じたことは、英文法的に動詞が多用されていて、処理を詳しく見ないと何がしたいか分からないということです。
この書き方ではadd,create,changeの3種類の動詞が使用されており主目的がわからなくなっています。
また、助詞が使われていないことも上記の問題を生み出すと考えられます。
解決策と考え方
上段で問題点をあげました。
では一つずつ潰していきましょう。
動詞選定
英語では本来関係代名詞等を用いない簡単な文の場合、動詞は1文で1つになります。
今回の場合主たる目的はDBからの取得になっているため、動詞は取得することを表すもの1つにします。
また、 DBからの取得の場合createよりもfetchが最適と考えられるため、fetchを用いていきます。
目的語選定
こちらはappliedDataまたは申請中という意を込めて現在分詞を用いたapplyingDataでもいいかと思います。
現在、fetchAppliyngDataまで出来上がりました。
補語追加
追加申請を表す語については助詞のforを用いれば分かりやすくなるかと思います。また助詞の後の動詞であれば、それが略語なのか動詞として使用しているのかが一目で分かりやすいため、forAddとします。
現在、fetchAppliyngDataForAddまで出来上がりました。
形容詞選定
個人的に今回のメソッド名を一層難しくしていると思う申請対象ではないという意味を表すものについて考えていきます。
まず、このメソッドが使われているクラスは申請関連にしか使われません。またこのクラスの申請はaddとupdateを対象としています。
解決策その1
追加対象外という意を込めforNotAddまたはforExcludedAddを用いる
解決策その2
変更対象外という意を込めNotChangedまたはNotTargetを用いる
その場合はchangeやtargetの対象がわかるようにforAddは採用せず、NotTargetOfAddなどになり複雑になる。
候補
fetchAppliyngDataForNotAdd
fetchAppliyngDataForExcludedAdd
fetchNotChangedAddsAppliyngData
fetchNotTargetOfAddAppliyngData
元祖
addCreateNotChangeAppliedData
まとめ
メソッド名は長さよりも分かりやすさが何よりだと思うので元祖に比べればマシなものは完成したかなと感じる。
しかし、どれもしっくりするものではなく、これはメソッド名だけでなく、そもそもメソッドに処理が多すぎる可能性も否めないため、適切な処理量まで考えなきゃダメだと感じた。
ポイント
- 動詞は1つ
- 現在分詞、受動態などを用いて情報を装飾
- 助詞forは結構使える
最後に
かなり書き殴りになり、完璧なものができたわけでもないので、「こういう考え方があるよ」「こうした方がいいんじゃない?」等のご意見があればぜひお待ちしております!