bugfix> c# > 投稿

私は、非常に大規模で大規模なColdFusionレガシーアプリケーションを分解し、その場所にいくつかの.NETサービスを作成する、かなり大きなプロジェクトの真っin中にいます。このため、この新しいバックエンドに移行するときにサポートする必要があるという大ファンではない要件がいくつかあります。これらの要件の1つは、数百のオプションフィールドを持つ非常に大きな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 件
  • サポートする必要があるユースケースについてはわかりませんが、これを行う1つの方法は、JSONをそのまま保存し、そこから作業することです。

    特に、たとえばPostgreSQL JSONタイプでは、これは非常にうまく機能しますが、テキストフィールドに格納するだけでも、いくつかのユースケースや負荷の下では実行可能なオプションになる可能性があります。また、次のステップにすばやく移動できるように手を解放します。

あなたの答え