0

私はDDDを初めて使用するので、用語や理解が少しずれている場合は実行してください。しかし、私を訂正してください、そしてどんなアドバイスも大歓迎です。

私がソーシャル求人掲示板サイトを運営していて、候補者、仕事、会社という総体的なルーツを特定したとしましょう。非常に異なるもの/コンテキストであるため、それぞれに独自のデータベーステーブル、リポジトリ、およびサービスがあります。しかし今、私はデータブロックが候補者、仕事、または会社のいずれかのデータを表示するPinterestスタイルのホームページを構築する必要があります。

ここで注意が必要なのは、データブロックが表す集合体に何かが最後に発生したとき(会社がいいね/コメントされた、またはジョブが更新されたときなど)までにデータブロックを並べ替える必要があり、ページングが無限スクロールの形で発生することです。 Pinterestのように。これらのアグリゲートは独立して発生するため、特定のページにどのアグリゲートがいくつあるかを知る方法がありません。(しかし、たとえば、アグリゲートの最終更新時刻を追跡するテーブルを作成した場合、これを独自のリポジトリを持つ別のアグリゲートルートに昇格させる以外に選択肢はありませんか?)

ページングロジックはどこに実装しますか?リポジトリごとに集約ルートごとに1つのサービスが必要であるとどこかで読んだので、コントローラーで並べ替えてページングする必要があります(ちなみにMVCを使用しています)?または、このような境界を越えたものを実行する独立したアプリケーションサービスが必要ですか?どちらの場合でも、dbからすべての集計のすべてのエンティティをフェッチする必要がありますか?

それはすでにあまりにも多くの質問ですが、私は基本的に尋ねています:

  1. ページングプレゼンテーション、ビジネス、または永続性ロジックですか?どの水平層?
  2. 境界を越えたコードはDDDのどこにあるべきですか?どの垂直スタック?
4

1 に答える 1

0

いくつかのことが思い浮かびます。

  • この集計データはどのくらい新鮮である必要がありますか? リアルタイムが大きな価値をもたらすとは思えません。ビジネス担当者に相談して、ある程度の待ち時間について交渉してください。これにより、問題に対するより簡単なソリューションを構築できます。
  • 何らかのプロセスでスキャン、集計、ソートを行い、その結果を非同期に保存しないのはなぜですか? データベース (Redis) に存在する必要さえありません。交渉された待ち時間は、プロセスを実行する間隔になる可能性があります。
  • あなたの例では、ページングは​​ビジネス上の決定事項ではありません。無限スクロールと、キャッシュされ、集計され、並べ替えられた情報を取得する ajax 呼び出しを提供するだけで済みます。これは DDD とはほとんど関係ありません。
  • UI アーティファクトと集計、並べ替えのプロセスは、データ、またはデータを目的の形式で提供する各コンテキストのデータ コンポーネントと連携して、それ自体が非常に重要であるように見えます。
于 2012-04-29T12:00:53.117 に答える