Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。
編集可能
2016年11月25日

lombokから始まるOOP談義 クラス爆発問題、抽象化、設計、チームetc

面白かったのでまとめました。 誰でも編集可にしておくので自由に追加してください。
9
HASUNUMA Kenji (Deprecated) @khasunuma_old

Lombokは仕組みとしては興味深いけれども、自分ではもはや使うことはないし、他人に勧めることもしません。各クラスの責務について真剣になって考えたら、「ボイラープレート・コード」という発想自体が意味のないものに思えるのです。

2016-11-25 02:27:16
HASUNUMA Kenji (Deprecated) @khasunuma_old

getter/setterもその存在意義を真剣に考えれば、Lombokで軽々しく動的生成するような類のものではないという結論に達しました。DTOと呼ばれるものについても、一度真剣になってその意味を考えてみることは必要だと思っています。

2016-11-25 02:30:12
HASUNUMA Kenji (Deprecated) @khasunuma_old

Javaのクラス記述が冗長であることは重々承知ですが(だからこそ時折C++に戻りたくなる)、Lombokに頼らず丁寧に作り込むことが大切だと感じています。

2016-11-25 02:36:33
HASUNUMA Kenji (Deprecated) @khasunuma_old

getter/setterの変更周りのミスがLombokで解決できるとか言う話。そもそもアクセサはpublicメソッド=外部インタフェースであるため、やたらに変更すべきではありません。外部インタフェースの変更=設計の敗北を意味するからです。

2016-11-25 02:40:29
HASUNUMA Kenji (Deprecated) @khasunuma_old

まとめ。Lombokは仕掛けとしては非常に興味深い。ただし、本気でクラス設計をやるのであれば邪魔者でしかない。Javaが冗長だと思うなら、プロパティや演算子オーバーロードを入れなかったGoslingを恨め。以上。

2016-11-25 02:43:33
なぎせ ゆうき @nagise

潔癖にやるのも息が詰まるんだよなあ。 割とリファクタリングで後付けでどうにかなる時代だしなあ。 真面目にやるにしても単にsetter作らずにコンストラクタとかビルダー作れば及第点にはなるんじゃないかしら

2016-11-25 07:39:25
なぎせ ゆうき @nagise

「クラス記述」の冗長ってなんだろうな。一般に言われるのは変数の宣言型とコンストラクタとで冗長になることが多いみたいな話だけど、あれはローカル変数のことだし twitter.com/khasunuma/stat…

2016-11-25 07:44:30
なぎせ ゆうき @nagise

これ一発で完璧な設計をするって思想でしょう?ある意味ではウォーターフォール的な。 完璧超人を求める思想ってのは修行僧側の思想としては否定しないんだけど、マネージャーの立ち位置でおまえら悟り開ける!ってのは違うと思うんだ。 仕組みで解決するならリファクタリングでリカバーとかが twitter.com/khasunuma/stat…

2016-11-25 07:52:52
なぎせ ゆうき @nagise

もちろん、外部インターフェースを一旦公開して、使われ出すと容易に変えられなくなるけど。 それでも古いの捨てて新しいインターフェースに移行とかいろいろリカバーする手法はある。 プログラマを追い込む悟りハラスメントよりはヒューマンエラー対策を考える方向でサポートしたい今日この頃

2016-11-25 07:57:04
なぎせ ゆうき @nagise

アクセサって外部インターフェースとしてみるとフィールドアクセスもsetterも同じでええやん、なんだけど、オブジェクトの永続化とかメモリの話だと違ってきてなあ……

2016-11-25 08:15:02
なぎせ ゆうき @nagise

@khasunuma まあ、僕も含めてなんだけど、確かにpublicを軽んじてるんですよね。 僕の場合は背景事情が変わってきたからpublicをやや軽めの位置に再配置した感じではありますが。

2016-11-25 08:44:14
rysh @cactaceae

同意。そう考えると多機能なlombokじゃなくて安全なBeanを作る事に主眼を置いてるimmutablesを選択するほうがいいなじゃ無いかと今思った。immutables.github.io @stb_nissie

2016-11-25 08:47:06
rysh @cactaceae

lagomがlombokじゃなくてimmutables使ってるのもきっとそういうことなんだろな

2016-11-25 08:47:39
Masatoshi Shimada (島田) @smdmts

バイナリコードを弄って自動生成する感じのlombokとかImmutablesとかのJavaのライブラリ、言語仕様にハックしてる感があって気持ち悪くて使いたく無いのだけど、そんな事するくらいならはじめからScalaやKotlin使ったほうがよほど筋が良いというか。

2016-11-25 08:53:40
STB a.k.a. さとまる @stb_nissie

この一連のツイート、主張内容は理解できるんだけど、俺はそもそもbeanというものが好きじゃなくて、でもbeanを用意しなきゃいけない、って時に仕方なくLombokを使ってる、って立場なので、ちょっと俺にはハマらないんだよな。 twitter.com/khasunuma/stat…

2016-11-25 08:37:45
なぎせ ゆうき @nagise

外部要因で使ってんだよ!ってことですね twitter.com/stb_nissie/sta…

2016-11-25 08:45:16
なぎせ ゆうき @nagise

この辺りの話題は一見して極簡単なことのように見えるけど、実はなかなか矛盾せずにまとめるのが難しい話題。 getter/setterがプロパティ構文になれば解決って単純なもんでもない。 プロパティは一応の落としどころではあるけどね。

2016-11-25 08:48:27
STB a.k.a. さとまる @stb_nissie

俺にとってsetter/getterは、本当は要らない子なんだ。なんならフィールドをpublicにしてやりたいくらいなんだ。値への単純なアクセスではなく副作用を伴うメソッドの場合、その名前にset/getを使いたくないとすら思ってる。

2016-11-25 08:44:58
STB a.k.a. さとまる @stb_nissie

そもそも最近は、オブジェクト指向に対して、俺は少し懐疑的になってきてるんだよなあ。

2016-11-25 08:52:33
なぎせ ゆうき @nagise

@stb_nissie お。踏み込みますね。どの辺に疑問を?

2016-11-25 08:57:17
STB a.k.a. さとまる @stb_nissie

@nagise あんまりいうとマサカリが怖いんですけどw ……厳格なオブジェクト指向ポリシーの適用は、コード量を爆発させてしまう感じがして、それは手段として本当に幸せなのか、といつも思ってます。……まあ、「IDEは言語仕様の一部となりえるか」という命題に似てると思います。

2016-11-25 09:06:25
rysh @cactaceae

@stb_nissie @nagise 僕は全部に一律で適用するのがよく無いと思ってます。TDDやDDDもそうなんですが、ビジネスやUI上の重要な部分が変更の多くかつロジックが複雑になるので、そういうところは手厚く書いて、そうじゃ無いところはシンプルに書くと。

2016-11-25 09:13:34
rysh @cactaceae

「機能変更とバグ修正以外で動いてるコードを触らない」という原則はすこし変えたほうがいい。頻繁に変更が入る部分やバグが頻繁に発生する部分は設計改善の変更をいれる。リリース後にコストを下げるための変更が「出来る」なら、初期の設計過剰も避けられるし、メンテナンスのコストも抑えられる。

2016-11-25 09:24:38
STB a.k.a. さとまる @stb_nissie

@cactaceae @nagise はい。私も、軽量でいいところは軽量に書いた方が、人間にとって優しいと思います。何もそこまでObject神を崇めなくてもいいでしょうとw

2016-11-25 09:17:43
残りを読む(80)

コメント

Yuta Okamoto @okapies 2016年11月25日
周りのクラスタでの会話を追加しました。雰囲気違ったらすいません。
1
rysh @cactaceae 2016年11月25日
ありがとうございます!
0