【DDD・ドメイン駆動設計】Scalaでリポジトリ・IDなどを型パラメータで縛る意味

DDD、ドメイン駆動設計、clean architecture、型パラメータ(type parameter)、型メンバーなどの割とまとまらない一連の会話
2
nextbeat Developers @nextbeat_dev

社内で使用している技術についてCTOにインタビューしました🙋✨ 開発者はCTO衣笠。プロダクト共通のScalaのコア技術「IxiaS」をOSS化! medium.com/nextbeat-engin… #Scala #Slick #Playframework pic.twitter.com/HAvynVzRbw

2019-03-06 18:17:54
拡大
拡大
がくぞ @gakuzzzz

何度か書いてますが、こういうEntityModelとIdの型の紐付けをジェネリクスでやるのは内部情報の露出になって扱いづらくなるのでお勧めできません。型メンバで扱う方が実装クラスやそれを扱う側でジェネリクスヘルが発生しなくなるのでお勧めです。 twitter.com/nextbeat_dev/s…

2019-03-06 19:15:09
がくぞ @gakuzzzz

.@j5ik2o かとじゅんさんがジェネリクスでやるから広まっちゃってるじゃないですかー!w (雑な責任転嫁) github.com/j5ik2o/spetsto… 後の方では型メンバ使う形になってるけどあんまり広がらないっすね…… github.com/j5ik2o/scala-d…

2019-03-06 19:26:05
がくぞ @gakuzzzz

かとじゅんさんにアオリリプを書いている間にかとじゅんさんにふぁぼられていたでござる

2019-03-06 19:28:03
加藤潤一(かとじゅん) @j5ik2o

@gakuzzzz 過去の自分を心より恥じる…。がくぞさんの意見に禿同。抽象型メンバーで十分ですね。啓蒙活動はやっていきですねw

2019-03-06 19:31:21
がくぞ @gakuzzzz

@j5ik2o 地道に啓蒙活動やっていきしましょうw

2019-03-06 19:33:44
Kenji Yoshida @xuwei_k

自分もそういうコード見かけることあるけど、(型パラメータでもtype memberでも)そこまでたいしたメリットないというか中途半端なコード出来上がるだけなパターンが多い気がするので、よくわからずにDDD用の専用traitとか作るの、むしろアンチパターンだ!くらいに言って言った方がいいんだろうか…

2019-03-06 19:35:51
Kenji Yoshida @xuwei_k

でもたいして役に立たない謎の規約がコード上出来上がるだけで、逆に全体的に取り返しつかないほど酷くなることもないと思うから、そういう意味では強く主張するつもりないというか、どうでもいい感あるが。もしくは自分が今まで見たのが微妙だっただけで、うまく作れば役立つことあるのかもしれないが

2019-03-06 19:35:51
Kenji Yoshida @xuwei_k

引用しようと思って貼り付け忘れた… twitter.com/gakuzzzz/statu…

2019-03-06 19:36:43
加藤潤一(かとじゅん) @j5ik2o

糖質真面目に減らすなら、コーンとペーストは除外だよ。 pic.twitter.com/qWumyZTPDn

2019-03-06 19:37:23
拡大
がくぞ @gakuzzzz

まぁせっかくOSSな訳だしPRなり何なり送れって話ですよね。はい

2019-03-06 19:37:36
がくぞ @gakuzzzz

ちなみに僕はequalsでIdだけ見るようにoverrideするのは大抵のケースにおいてメリットよりもデメリットの方が上回ると思っている派です

2019-03-06 19:40:35
Toshiyuki Takahashi @tototoshi

@xuwei_k アンチパターンだと思いますよ

2019-03-06 19:41:26
ニャーニャーとなくぞんび @AoiroAoino

trait Entity 定義するの見たこともやったこともあるけど、結局 id があるぞとか、これが Entity だ!って主張させるくらいで、それ以上突っ込んでもあんまり楽で幸せにはならなかったなぁ...

2019-03-06 19:49:53
Toshiyuki Takahashi @tototoshi

この前SparkのコードなのにDDDとクリーンアーキテクチャのWebアプリ風の作りをしてるコードに出会ってほとんど消すということがあった。(複雑だからとかじゃなくて概念の理解が全て間違っていたため)

2019-03-06 19:54:21
がくぞ @gakuzzzz

強制的にStringをKにしているがKがStringのTaggedTypeである制約はどこにも無さそうだけど大丈夫なのだろうか? github.com/ixias-net/ixia…

2019-03-06 20:01:25
KAWACHI Takashi @kawachi

DDDは設計のときに活用してほしい。Entity trait とかは比較的些細なことで、依存方向に注意しようとか、インタフェースに対してプログラミングしようとか、そのへんをまず…ね

2019-03-06 20:24:58
加藤潤一(かとじゅん) @j5ik2o

唐突なかとじゅん感がすごかった(小並感

2019-03-06 20:34:00
がくぞ @gakuzzzz

_人人人人人人人_ > かとじゅん <  ̄Y^Y^Y^Y^Y^Y ̄ twitter.com/j5ik2o/status/…

2019-03-06 20:41:01
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

実際にうちでは2018/09からのプロダクトがかとじゅんさんのジェネリクスの劣化バージョンで書かれて動いていますね。 spetstoreが広く広がっているのはやはりREADMEが日本語で書かれているのが大きいのかなあ。 twitter.com/gakuzzzz/statu…

2019-03-06 21:08:01
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

DDD、というかリポジトリ定義周りで型パラメータや型メンバー使うのアンチパターン説、うちでもやってみて失敗感あるため一定わかる。 一方でこの失敗感をうまく説明できていない。リスコフの置換原則とインターフェース分離の原則に反しているから、であっているかなあ。

2019-03-06 21:12:39