Есть ли шаблон или более чистый способ сохранения большого объекта с несколькими вложенными классами? - PullRequest
0 голосов
/ 25 мая 2018

Я нахожусь в центре довольно крупного проекта, который включает в себя декомпозицию очень старого и большого унаследованного приложения 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 и внешнего интерфейса, это действительно единственный вариант.

Есть шаблон или что-то, что сделало бы это немного чище?Что-то похожее на конструктор или фабричный шаблон, но который обрабатывает сохранение вместо создания объекта?

Это будет распространенная проблема, с которой я сталкиваюсь с другими объектами домена, более понятный способ решения этой проблемы был бы потрясающим.

1 Ответ

0 голосов
/ 25 мая 2018

Я не уверен насчет сценариев использования, которые вам нужно поддерживать, но один из способов сделать это - просто сохранить JSON как есть и работать оттуда.

Особенно, например, с типами JSON PostgreSQLэто может работать очень хорошо, но даже простое хранение его в текстовом поле может быть приемлемым вариантом при некоторых случаях использования и нагрузках.Это также освободило бы ваши руки, чтобы вы могли быстро перейти к следующему шагу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...