Sono nel bel mezzo di un progetto piuttosto ampio che comporta la scomposizione di un'applicazione legacy ColdFusion molto vecchia e di grandi dimensioni e la creazione di alcuni servizi .NET al suo posto. A causa di questo, ci sono alcuni requisiti che non sono un grande fan di ciò che ha bisogno di supportare mentre passiamo a questo nuovo back-end. Uno di questi requisiti è un singolo endpoint che deve avere un payload JSON molto grande con molte sottoclassi facoltative / richieste e salvarlo tutto in una volta.
Ho suddiviso questi dati in un oggetto dominio piuttosto grande e in varie sottoclassi annidate, e salviamo ogni sottoclasse in una transazione se è inclusa nella richiesta.
Il codice ha un aspetto simile al seguente:
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)
Se potessi evitare di doverlo fare, ma finché non saremo in grado di riscrivere più di questo front-end ColdFusion questa è davvero l'unica opzione.
Esiste uno schema o qualcosa che lo renderebbe un po 'più pulito? Qualcosa come un costruttore o modello di fabbrica ma che gestisce il risparmio rispetto alla creazione / istanziazione di un oggetto?
Questo sarà un problema comune con cui ho a che fare con altri oggetti del dominio, un modo più semplice per avvicinarsi a questo sarebbe fantastico.