DoctrineのEntityのgetter、setterをやめてみたお話。から半年たったのと雑なツイートしたらリプライが来てしまったためになんとなくブログ更新してみます。
この話気になるので観測させてください
— 田中ひさてる (@tanakahisateru) May 2, 2017
てか、別にgetter/setterやめて辛くなったわけじゃないので雑にツイートしてしまってごめんなさいという気持ちしかないです・・・。
Getter/Setterをやめて辛いと思ってしまった原因
何かしたらのプロパティに値が入ったタイミングで、何かしらの処理を実行したい場合。 実際のコード晒せないんで、雑なサンプルコードはこんな感じ。
|
|
こんなコードに突然ucfirst
をする仕様変更が入った場合・・・。
プロパティ直接触ってしまっているので、__set
のマジックメソッドも使えない。
そんなコードをすべて修正しなきゃいけない。
(うーんサンプルコードがよくないかも。。。)
今回の場合は修正箇所が大量にあったために辛かっただけで、しかも別に解決策あったので 「Getter/Setterがなくなったから辛くなったわけではない」 です。
他に何か辛い所とかある?
getter/setterがなくなると、doctrine:generate:entities
でEntity生成してしまった時にGetter/Setterが生成されてしまって悲しい気持ちになるとかはありますが・・・別に辛いってわけじゃないので。。。
getterをよく使うのってtwigだと思うけど、省略できるから特に辛くない。
実はgetter/setter使ってるプロジェクトも並行して開発しているけど、別にあってもなくても変わらないなぁーとしか・・・。
ない方が若干コードが読みやすい程度かなぁ。
あーsetterでタイプヒント使いたいとかはあるかも。
本当に欲しいのは新潟アクセス修飾子なのかも
最近はPHP7で開発しているし、スカラータイプヒンティングは使いたい。
ということでやっぱsetterは欲しい。
でもGetterって別にいらないよねって気持ち強いかも。
読めるけど、書けない的なものが欲しいって考えてたらniigata新潟アクセス修飾子のご提案がサポートされたらいいのになぁーって思ってきた。
まあ同じようなことは@var
で型を書いて、__set
が実行されるタイミングで型チェックすればいいのかもと思う気持ちある。
しかしそんな面倒くさい事するなら、setter用意すればいいじゃないって気持ちある。
最後に
結局半年たってgetter/setterあってもなくてもどちらでもいいなぁーとしか思いません。
そこまで重要なことではない気がします。
だからこそ、Doctrineに限らずgetter/setterに関する話を誰かに聞いてみたい気持ち強いです。
だれか教えてください・・・。