プログラミングにおける命名の重要性

社内で共有したものを外部にも共有します。

命名の重要性については強調してきた「つもり」になっていたようなので皆さんこちらは必ず読むようにしてください。
https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E5%90%8D%E5%89%8D%E9%87%8D%E8%A6%81/


「情報セキュリティ向上クラウド」という言葉も3ヶ月くらいは検討したような気がします。そのことによってやることとやらないことが明確になります。(明確にします。)マーケティングの機能は実装しない、安否確認は本気でやるか悩む。といった形で意思決定に影響します。後から入ってきたメンバーにもわかりやすいので保守性も上がります。
プロダクト全体から1機能自体までをどう定義するか、スコープをどう決めるかは命名によって決まります。~Serviceというのがよくない理由もこういったことからです。

例えば

Companyクラスに関するmethodはapp/models/company.rb
Companyクラスに属するが機能として切り出せるものを切り出し下記のようなディレクトリ構造にするのが望ましい
Company::Setupsはapp/models/company/setups.rb
Company::Trialsはapp/modles/company/trials.rb
Company::Incinerableはapp/modles/company/incinerable.rb

実は、classmethodは等価なので
CompanyCreateService.new(params).create_trial!
CompanyCreateService.new(params).create_setup!
CompanyCreateService.new(company).incinerate!

  というよう に書くことも出来ると思いますが、Serviceが非常にでかく、CompanyCreateServiceがあまり意味をなさない塊であることが想像出来ると思います。適切なmodelに切り分けることで

Company::Setups.new(company_params, setup_params).save => company

Company::Trials.new(trial_params).save => company

といった感じだろうという予想がつくようになります。

そう考えると実は、プログラムは機械に対して書いているのではなく、人間に対して書いているということがわかると思います。よろしくおねがいします。

この記事が気に入ったらサポートをしてみませんか?