【DDD・ドメイン駆動設計】Scalaでリポジトリ・IDなどを型パラメータで縛る意味
- k_bigwheel
- 6994
- 15
- 3
- 0
社内で使用している技術についてCTOにインタビューしました🙋✨ 開発者はCTO衣笠。プロダクト共通のScalaのコア技術「IxiaS」をOSS化! medium.com/nextbeat-engin… #Scala #Slick #Playframework pic.twitter.com/HAvynVzRbw
2019-03-06 18:17:54何度か書いてますが、こういうEntityModelとIdの型の紐付けをジェネリクスでやるのは内部情報の露出になって扱いづらくなるのでお勧めできません。型メンバで扱う方が実装クラスやそれを扱う側でジェネリクスヘルが発生しなくなるのでお勧めです。 twitter.com/nextbeat_dev/s…
2019-03-06 19:15:09.@j5ik2o かとじゅんさんがジェネリクスでやるから広まっちゃってるじゃないですかー!w (雑な責任転嫁) github.com/j5ik2o/spetsto… 後の方では型メンバ使う形になってるけどあんまり広がらないっすね…… github.com/j5ik2o/scala-d…
2019-03-06 19:26:05@gakuzzzz 過去の自分を心より恥じる…。がくぞさんの意見に禿同。抽象型メンバーで十分ですね。啓蒙活動はやっていきですねw
2019-03-06 19:31:21自分もそういうコード見かけることあるけど、(型パラメータでもtype memberでも)そこまでたいしたメリットないというか中途半端なコード出来上がるだけなパターンが多い気がするので、よくわからずにDDD用の専用traitとか作るの、むしろアンチパターンだ!くらいに言って言った方がいいんだろうか…
2019-03-06 19:35:51でもたいして役に立たない謎の規約がコード上出来上がるだけで、逆に全体的に取り返しつかないほど酷くなることもないと思うから、そういう意味では強く主張するつもりないというか、どうでもいい感あるが。もしくは自分が今まで見たのが微妙だっただけで、うまく作れば役立つことあるのかもしれないが
2019-03-06 19:35:51ちなみに僕はequalsでIdだけ見るようにoverrideするのは大抵のケースにおいてメリットよりもデメリットの方が上回ると思っている派です
2019-03-06 19:40:35trait Entity 定義するの見たこともやったこともあるけど、結局 id があるぞとか、これが Entity だ!って主張させるくらいで、それ以上突っ込んでもあんまり楽で幸せにはならなかったなぁ...
2019-03-06 19:49:53この前SparkのコードなのにDDDとクリーンアーキテクチャのWebアプリ風の作りをしてるコードに出会ってほとんど消すということがあった。(複雑だからとかじゃなくて概念の理解が全て間違っていたため)
2019-03-06 19:54:21強制的にStringをKにしているがKがStringのTaggedTypeである制約はどこにも無さそうだけど大丈夫なのだろうか? github.com/ixias-net/ixia…
2019-03-06 20:01:25DDDは設計のときに活用してほしい。Entity trait とかは比較的些細なことで、依存方向に注意しようとか、インタフェースに対してプログラミングしようとか、そのへんをまず…ね
2019-03-06 20:24:58実際にうちでは2018/09からのプロダクトがかとじゅんさんのジェネリクスの劣化バージョンで書かれて動いていますね。 spetstoreが広く広がっているのはやはりREADMEが日本語で書かれているのが大きいのかなあ。 twitter.com/gakuzzzz/statu…
2019-03-06 21:08:01DDD、というかリポジトリ定義周りで型パラメータや型メンバー使うのアンチパターン説、うちでもやってみて失敗感あるため一定わかる。 一方でこの失敗感をうまく説明できていない。リスコフの置換原則とインターフェース分離の原則に反しているから、であっているかなあ。
2019-03-06 21:12:39