Domain driven design 在应用程序服务中使用transactionscope
在我当前的payment gateway应用程序中,我希望执行以下步骤Domain driven design 在应用程序服务中使用transactionscope,domain-driven-design,Domain Driven Design,在我当前的payment gateway应用程序中,我希望执行以下步骤 从贝宝转移资金 将付款记录保存在数据库中 将用户的资金(在我们的数据库中)增加他转移的金额 我正在应用层中执行所有这些步骤。交易范围内 下面是代码 public void DepositFundInAdvertiser(PaymentInfo paymentInfo, RegistrationID advertiserRegistrationID) { using (Transact
public void DepositFundInAdvertiser(PaymentInfo paymentInfo, RegistrationID advertiserRegistrationID)
{
using (TransactionScope scope = new TransactionScope())
{
PaymentResult paymentResult = paymentService.DepositFund(paymentInfo);
Advertiser advertiser = advertiserRepository.Find(advertiserRegistrationID);
TransactionNumber transactionNumber = paymentRepository.NextTransactionNumber();
Payment payment = PaymentFactory.NewPayment(advertiser.Person, transactionNumber, paymentInfo, paymentResult);
paymentRepository.Save(payment);
AdvertiserBalance newBalance = new AdvertiserBalance(advertiser.Balance.Amount + paymentInfo.PaymentTotal);//Increasing advertiser fund
advertiser.AddFund(newBalance);
advertiserRepository.Save(advertiser);
scope.Complete();
}
}
问题:我的问题是我能像这样在应用层中使用Transactionscope吗,因为所有这些操作都应该是原子的?我认为这是复杂性和健壮性之间的一个很好的折衷。您只需记住,通过这样做,您可以将两个存储库结合起来。如果不考虑此更改对另一个和事务基础架构的影响,您将无法更改其中一个。只要两个存储库使用完全支持分布式事务的相同数据库实例或RDBMS,一切都很好。有点 您可能知道,纯解决方案是异步消息传递,但它引入了很多复杂性。问题是,异步消息传递的复杂性趋于平淡——随着存储库、数据存储等的增加,这种复杂性不会增加。从长远来看,这是值得的。如果您有一个这样的用例,我会支持您提出的解决方案。正如我所说的,这是一个很好的折衷,制作软件就是一个很好的折衷