ぬー速!

DDDわかるプログラマー来て

1 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:01:06.572 ID:Lpt0LmhEM.net
DDDを導入する動機って何

30 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:48:54.870 ID:Lpt0LmhEM.net

>>28
自動テストで使うActionsの料金、目玉が飛び出るんだよね

36 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:12:14.156 ID:OfwGggACM.net

>>33
通知をDBとジョブでやってたのを別サービスに飛ばして処理するように変えた時
そもそもリポジトリという概念がないのでそうなった

20 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:29:38.756 ID:Lpt0LmhEM.net

>>17
こういうのって何回かやってみても失敗するもんなの?

42 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:33:49.046 ID:11qETOad0.net

>>37
並列処理するとDBのバッティングが起こるというのがあまりわかってない
たとえばテストケースを7分割して別のデータベースで実行すれば単純にテスト時間が1/7になるという話ではないのか
トランザクションはテストケースごとに行っているはず

並列処理のためにトランザクションでガードしてるっていうのは、
つまり、あるインスタンスでのテストが終わるのを、別のインスタンスのテストが待っていて、そのテストが終わるのを他のテストも待っているみたいな依存関係が発生しているってこと?
それだと重いんじゃないか。並列できてないような気がするが…

正規化しすぎが問題なら、必要なデータはほとんど同じだと思う
それなら共通基盤となるコンテキストを用意しておいて、
各テストではこのコンテキストで用意したレコードをカスタマイズしてテストするみたいにするとだいぶ時間短縮できそうではある
テスト終了後にそのカスタマイズ情報は破棄する感じ
こうするとテストケースを書くときも行数が減り見通しがいいはず
(問題はみんながみんな多種多様な準備をしているからぐちゃあっとなっているところかも。もしそうならメンバーはテスト書くとき苦悶の表情をしていそう)

27 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:43:21.596 ID:yr0kp+Df0.net

昔亀有の一帯にDDD殺しますって落書きあったのわかるやついる?

44 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:39:31.105 ID:OfwGggACM.net

並列テストにおいて割とメジャーな手法だと思ってたんだけど違うのか

46 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:55:23.016 ID:OfwGggACM.net

>>45
インスタンス毎にコンテナでDB建てて、それに接続
アプリケーションレベルでの並列処理ではさっき言ったトランザクションでの分離で5並列にして動かしてる
現状上手く動いてるから並列処理に関しては課題に感じてない。

33 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:59:32.994 ID:jHdh8S4n0.net

MQってなんだ?Message Queue?
あんまりストレージ/レポジトリとしてMQを使う印象がない
何かを非同期実行してデータベースに保存するために使う感じなのか(保存 / 遅延保存みたいな)
責務的にはアクションとかサービスみたいな印象だ
もしレポジトリとしてMQを使うのならば、クラスごと分けるのが正道な気がするな
(じゃないと保存のためのフォーマットが依存し合う)

俺の場合使用側で分岐ロジックを書く
一方で使用側にそういうロジックが大量発生する場合はなんかおかしい気がする
(そもそもサービスが違う/やりたいことが違うというか)

25 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:41:57.070 ID:jHdh8S4n0.net

>>22
俺はそれはテストが重いことの原因がDBアクセスが遅いというのが真の原因なのか疑問に思う
それの根本はORMの使用によってN+1問題が発生していたり、テストの前準備のために非常に多くのデータを読み込んでいることによる気がする

たとえば1つの単体テストを実行するごとに大量にデータアクセスが発生すればそれはめちゃくちゃ重い
モック化することによって解決する問題かは疑問が残る。それにDB特有で発生する問題も検知しにくそう

テストを並列化するとか、非常に重いテスト部分を解消するとか、全体にわたってslowになっているクエリを高速化するとかに課題がありそう
しらんけど

29 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:47:19.308 ID:Lpt0LmhEM.net

>>25
ちゃんとテスト毎にトランザクション張って他のテストに影響が出ないようDBをセットしつつ1インスタンス7並列でそれを複数のインスタンスで分割して動かしてる
それでもテストが追加される度にどんどん遅くなってく

正直DBアクセスを伴うテストはシナリオテストだけで良くて、ビジネスロジックのエッジケースは単体テストでカバーしてあげたい

18 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:24:56.400 ID:F9FW0QsG0.net

抽象化された設計のメリットって外側の交換可能性なんだけど
実際やってて思うのは
プロジェクト内でDBが変わることなんてないんだよな
リポジトリとか抽象化したって結局
本で書かれてるような「DBをファイルにすることすらできる」とか現実には起きない

9 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:06:38.984 ID:Lpt0LmhEM.net

>>8
ちげーよ!

21 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:30:31.058 ID:Wgc3Tnek0.net

オススメはAAAだよ!

32 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:50:55.752 ID:Lpt0LmhEM.net

>>28
あとORMでDBへの接続が失敗したりエッジケースでシンタックスエラーはいた場合のテストケースってどうやって書いてる?
モックできないとその先の処理をテストできないんだよね

8 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:06:14.419 ID:vPuuPZes0.net

遊戯王のカードの次に流行らせようとして失敗したヤツか
ダンジョンダイスドラゴンズだったっけ?

23 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:34:06.928 ID:Lpt0LmhEM.net

>>21
Arrange Act Assertか
なんかうちではGWTつかってる

4 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:02:14.106 ID:Lpt0LmhEM.net

デデデ大王じゃない😡

4 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:02:14.106 ID:Lpt0LmhEM.net

デデデ大王じゃない😡

45 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:48:44.371 ID:11qETOad0.net

俺が並列テストするときは同じDBにはしないかも
200分割するなら200個データベースを作る感じ
同じDBなら200分割しても10分割してもトランザクション待ちが多くなって効果が見込めないような気がする

これかな
https://irof.hateblo.jp/entry/2021/09/21/101205

5 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:03:41.858 ID:Lpt0LmhEM.net

マイクロサービスで適切にサービス分割するような場合は確実にやったほうが良さそうだけど、そもそもマイクロサービスがちゃんと必要になるレベルの規模の開発じゃない場合はいらなくない?

3 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:01:41.443 ID:Lea12kY+a.net

イベントどんぶり

34 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:09:14.988 ID:11qETOad0.net

>>29
テストケースごとにトランザクション張るのは遅いのとは関係ないと思う
1個あたり100msで終わるなら1000ケースあっても100秒で終わる計算

俺が見てきた案件ではテストケース用意のために不要なデータまでぞろぞろ大量に作りまわる処理が多くて
そこで異様に重くなっているのが多い印象
つまり各処理が重いというよりかは準備段階で重い(INSERTやCREATEやUPDATEが大量に走ってる?)

ビジネスロジックはDBアクセスを伴う必要はないというのはそうだと思う
ただ、既存のテストが重いのは↑によるもののように見える。しらんけど

13 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:13:09.647 ID:jHdh8S4n0.net

>>5もそうだが、人によってDDDとはなんぞというところから話が違う
異なる母体から集まってきたエンジニア同士なのだから使用語彙が大幅に違って当然
まずそこの部分の一致から始めて、「これって何よ」「これはこれだよ」という認識の突き合わせから必要だよね?ということをずっと言っている印象

基本的にはEric Evansが考えるDDDが聖典だから、それがどれだけ自分たちの持つプロダクトに活用できるかを知るのが重要かと思う
システムアーキテクトは、DDDを学習してそれをカスタマイズしてプロダクトづくりに応用することが使命だと思う(これは完全に俺の意見)

DDD知識を保有するメンバーが多数派ならその部分の会話についてハイコンテクストで済ませることができるからそれは有用
まあこれはコモディティ/民主化された知識あるあるだから、別にDDDに限った話ではないけど

14 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:15:27.548 ID:Lpt0LmhEM.net

>>10
やっぱそうよな
サービスの規模的に絶対導入すべきでない場合に導入すると終わるよな

チームメンバーが理解しないまま導入してもただただ複雑性だけが残るような気が知る

31 ::2024/08/22(木) 23:50:28.997 ID:MZprKnnn0.net

DDDやクリーンアーキテクチャや果てはGoF等々もかもしれないけど
開発を円滑に進めるための前提知識ってだけで導入するとか言う仰々しい物ではないと思ってる
ボブおじさんも似たような事書いてた気がすんな

11 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:08:25.518 ID:1jWQzT5ia.net

オナニーと営業だろ
客向けに最新の技術でコーディングなんてあほらしいこと言ったりさ

24 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:37:17.568 ID:jHdh8S4n0.net

>>18
マジでこれね
「取り外しできるよ!」という部分がメリットに感じない
ほとんど多くのプロジェクトでは取り外しすることはないと思う。特にDBや選択したフレームワークなど
ただし十分規模が大きいときは別かも
どこを拡張するかどこは拡張すべきでないかの判断は主観とか経験とかによりそう

>>19
導入すべきでないとはいわないけど、自分が伝道者となって長期的に見ていく気がないなら単なるオナニーになるかも
DDDに限らないけど

2 :以下、?ちゃんねるからVIPがお送りします:2024/08/22(木) 23:01:39.993 ID:jq+s62cC0.net

打倒カービィ

35 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:10:47.137 ID:aXCkInG90.net

〇〇を導入とか仰々しく言うやつは大体アジャイルやOOPで失敗した奴らと同じ匂いするわ

41 :以下、?ちゃんねるからVIPがお送りします:2024/08/23(金) 00:30:45.801 ID:OfwGggACM.net

>>36
なんか見当違いなこと言ってたわ
DDDにするならmqはリポジトリには置かんよな

モバイルバージョンを終了