我正处于一个相当大的项目中,它涉及分解一个非常古老的大型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和前端代码,这才是真正唯一的选择。
是否有某种图案或某种东西可以使它更清洁?像构建器或工厂模式,但处理保存而不是创建对象?
这将是我与其他域对象处理的一个常见问题,更简洁的方法来处理这个问题会非常棒。
答案 0 :(得分:1)
我不确定您需要支持的用例,但是一种方法是只保存JSON并从那里开始工作。
特别是对于PostgreSQL JSON类型,这可以很好地工作,但即使只是将它存储在文本字段中,在某些用例和负载下也是一个可行的选择。它也会释放你的双手,这样你就可以快速进入下一步。