Я использую ASP.NET Boilerplate для моего проекта. И у меня есть сущность, показанная во фрагменте кода ниже.
public class Transaction : FullAuditedEntity<Guid>, IMustHaveTenant
{
protected Transaction()
{
TransactionState = TransactionState.Uncompleted;
}
public TransactionState TransactionState { get; protected set; }
public virtual Loan Loan { get; protected set; }
public int TenantId { get; set; }
// ...
public async Task CompleteAsync(ICoreBankingService coreBankingService, IRepository<Transaction, Guid> transactionRepository)
{
try
{
// Perform a series of compulsory actions in some given sequence with coreBankingService that might throw exception
Loan.SetSomeStuffThatOriginatedFromMotherTransaction();
TransactionState = TransactionState.Completed;
}
catch (Exception ex)
{
// Log the exception and set this Transaction entity state appropriately
TransactionState = TransactionState.Failed;
}
finally
{
// Make sure by all means to persist the resulting the entity within itself
await transactionRepository.UpdateAsync(this);
}
}
}
Я понимаю, что я должен отделить постоянство от сущности (что, кстати, является архитектурой, предоставляемой ASP.NET Boilerplate из коробки! С использованием Application Services ).
Однако мне НУЖНО , чтобы убедиться, что я выполнил серию обязательных действий в некоторой заданной последовательности с coreBankingService
и сохранил изменения на каждом этапе этих вычислений на Transaction
сущность, отсюда и причина моего наивного и, вероятно, неправильного подхода.
Пожалуйста, каков правильный подход к такой проблеме? Как мне сохранить состояния объекта, которые являются результатом вычислений или действий в пределах одного объекта?