Agregados / repositorios múltiples en una transacción

Tengo un sistema de pago como se muestra a continuación. El pago se puede realizar a través de múltiples cupones de regalo. Los cupones de regalo se emiten junto con una compra. El cliente puede hacer uso de este cupón de regalo para futuras compras.

Cuando se realiza un pago a través de un cupón de regalo, la columna UsedForPaymentID en la tabla de GiftCoupon debe actualizarse con ese ID de pago (para la ID de giftcoupon).

Los GiftCouponIDs ya están disponibles en la base de datos. Cuando un cliente produce un cupón de regalo, tiene impreso GiftCouponID. El operador debe ingresar este ID de cupón en el sistema para realizar el pago.

Para la operación MakePayment (), se necesitan dos repositorios.

Repositorio de cupones de regaloRepositorio de pagos

CÓDIGO

// Use GiftCouponRepository para recuperar el objeto GiftCoupon correspondiente.

Esto implica el uso de dos repositorios para una transacción. ¿Es una buena práctica? Si no, ¿cómo podemos cambiar el diseño para superar esto?

Referencia: En DDD, el Agregado debe representar el límite transaccional. Una transacción que requiere la participación de más de un agregado es a menudo una señal de que el modelo debe refinarse, los requisitos transaccionales deben revisarse o ambos.¿Es correcto el CQRS para mi dominio?

CÓDIGO C #

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta