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 Pagamento

CÓ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();
}

questionAnswers(4)

yourAnswerToTheQuestion