私は卸売システム ドメインに取り組んでいます。一部の製品が配信されると、ドメインNewProductsDeliveredEvent
がトリガーされます。イベントには、ProductDelivery
製品コードと数量を含む一連の値オブジェクトが含まれます。以下のようなもの:
class NewProductsDeliveredEvent {
Set<ProductDelivery> productDeliveries;
}
class ProductDelivery {
ProductCode productCode;
Quantity quantity
}
ここまでは順調ですね。現在、インベントリの更新を担当するコンポーネントがこのタイプのイベントを受け取ったとき。現在利用可能な製品の数量で製品テーブルを更新する必要があります。だから私はそのようなものを持っています:
class NewProudctsDeliveredHandler {
ProductRepository productRepo;
handle(NewProductDeliveryEvent event) {
for (ProductDelivery delivery : event.getProductDeliveries()) {
Product product = productRepo.getByCode(delivery.getProductCode())
product.updateQuantity(delivery.getQuantity());
}
}
}
このようなロジックが多くの DB ラウンドトリップを生成することは簡単にわかります。私は、この問題を軽減するための解決策を考えています。1 つのアイデアはSpecification
、製品コードのパターンとビルド OR 仕様を使用することです。ただし、私のアプリケーションの製品コードはビジネス ID であるため、このソリューションには少し臭いがあります (誇張しているだけかもしれません)。
それを処理するためのより良い方法はありますか?どんなアイデアでも大歓迎です。