Vários agregados / repositórios em uma transação
Eu tenho um sistema de pagamento como mostrado abaixo. O pagamento pode ser feito através de vários cupons de presente. Os cupons de presente são emitidos juntamente com uma compra. O cliente pode fazer uso deste cupom de presente para compra futura.
Quando um pagamento é feito por meio de um cupom de presente, a coluna UsedForPaymentID na tabela GiftCoupon precisa ser atualizada com esse PaymentID (para o giftcoupon ID).
Os GiftCouponIDs já estão disponíveis no banco de dados. Quando um cliente produz um cupom de presente, ele tem o GiftCouponID impresso nele. O operador precisa inserir este CouponID no sistema para efetuar o pagamento.
Para a operação MakePayment (), são necessários dois repositórios.
Repositório de cupons de presenteRepositório de PagamentoCÓDIGO
// Use GiftCouponRepository para recuperar o objeto GiftCoupon correspondente.
Isso envolve o uso de dois repositórios para uma transação. É uma boa prática? Se não, como podemos mudar o design para superar isso?
Referência: No DDD, o Agregado deve representar o limite transacional. Uma transação que requer o envolvimento de mais de um agregado é frequentemente um sinal de que o modelo deve ser refinado ou os requisitos transacionais devem ser revisados, ou ambos.O CQRS está correto para meu domínio?
C # CODE
public RepositoryLayer.ILijosPaymentRepository repository { get; set; }
public void MakePayment(int giftCouponID)
{
DBML_Project.Payment paymentEntity = new DBML_Project.Payment();
paymentEntity.PaymentID = 1;
DBML_Project.GiftCoupon giftCouponObj;
//Use GiftCouponRepository to retrieve the corresponding GiftCoupon object.
paymentEntity.GiftCouponPayments = new System.Data.Linq.EntitySet<DBML_Project.GiftCoupon>();
paymentEntity.GiftCouponPayments.Add(giftCouponObj);
repository.InsertEntity(paymentEntity);
repository.SubmitChanges();
}