Я нахожусь в центре довольно крупного проекта, который включает в себя декомпозицию очень старого и большого унаследованного приложения ColdFusion и создание на его месте некоторых .NET-сервисов.В связи с этим есть некоторые требования, которые я не особо люблю, которые нужно поддерживать при переходе на этот новый бэкэнд.Одним из этих требований является одна конечная точка, которая должна принимать очень большую полезную нагрузку JSON с сотнями необязательных полей и сохранять все это за один раз.
Я разбил эти данные на довольно большой объект домена и различныевложенные подклассы, и сохранить каждый подкласс в транзакции, если он включен в запрос.
Код выглядит примерно так:
using (var transaction = await _transactionFactory.CreateDbTransactionScopeAsync(token))
{
//save basic patient info
newPatient = await _patientRepo.CreatePatientAsync(request, transaction, token);
//save patient medicare information
if (request.PatientMedicare != null)
newPatient.PatientMedicare = await _patientRepo.CreatePatientMedicareAsync(newPatient.Id, request.PatientMedicare, transaction, token);
//save patient flags
if (request.PatientFlags != null)
newPatient.PatientFlags = await CreatePatientFlagsAsync(newPatient.Id, request.PatientFlags, transaction, token);
//save patient code
if (request.PatientCode != null)
newPatient.PatientCode = await _patientRepo.CreatePatientCodeAsync(newPatient.Id, request.PatientCode, transaction, token);
//save patient facilities
if (request.PatientFacilities != null)
newPatient.PatientFacilities = await CreatePatientFacilitiesAsync(newPatient.Id, request.PatientFacilities, transaction, token);
... etc (this goes on for 15+ subclasses)
Если бы я мог избежать этого, я быно пока мы не сможем переписать больше этого кода ColdFusion и внешнего интерфейса, это действительно единственный вариант.
Есть шаблон или что-то, что сделало бы это немного чище?Что-то похожее на конструктор или фабричный шаблон, но который обрабатывает сохранение вместо создания объекта?
Это будет распространенная проблема, с которой я сталкиваюсь с другими объектами домена, более понятный способ решения этой проблемы был бы потрясающим.