私はDDDを初めて使用するので、用語や理解が少しずれている場合は実行してください。しかし、私を訂正してください、そしてどんなアドバイスも大歓迎です。
私がソーシャル求人掲示板サイトを運営していて、候補者、仕事、会社という総体的なルーツを特定したとしましょう。非常に異なるもの/コンテキストであるため、それぞれに独自のデータベーステーブル、リポジトリ、およびサービスがあります。しかし今、私はデータブロックが候補者、仕事、または会社のいずれかのデータを表示するPinterestスタイルのホームページを構築する必要があります。
ここで注意が必要なのは、データブロックが表す集合体に何かが最後に発生したとき(会社がいいね/コメントされた、またはジョブが更新されたときなど)までにデータブロックを並べ替える必要があり、ページングが無限スクロールの形で発生することです。 Pinterestのように。これらのアグリゲートは独立して発生するため、特定のページにどのアグリゲートがいくつあるかを知る方法がありません。(しかし、たとえば、アグリゲートの最終更新時刻を追跡するテーブルを作成した場合、これを独自のリポジトリを持つ別のアグリゲートルートに昇格させる以外に選択肢はありませんか?)
ページングロジックはどこに実装しますか?リポジトリごとに集約ルートごとに1つのサービスが必要であるとどこかで読んだので、コントローラーで並べ替えてページングする必要があります(ちなみにMVCを使用しています)?または、このような境界を越えたものを実行する独立したアプリケーションサービスが必要ですか?どちらの場合でも、dbからすべての集計のすべてのエンティティをフェッチする必要がありますか?
それはすでにあまりにも多くの質問ですが、私は基本的に尋ねています:
- ページングプレゼンテーション、ビジネス、または永続性ロジックですか?どの水平層?
- 境界を越えたコードはDDDのどこにあるべきですか?どの垂直スタック?