В C#, как я могу объединить или даже удалить два класса C#, которые почти полтергейсты? - PullRequest
0 голосов
/ 13 июля 2020

У меня два класса:

    public class UploadedBankData : BankData {

        [DataMember(Name = "sf__Id")]
        public new string SalesforceId {
            get => base.SalesforceId;
            set => base.SalesforceId = value;
        }

        [DataMember(Name = "sf__Created")]
        public bool SalesforceCreated { get; set; }

    }

и

    public class UploadedPersonAccount : PersonAccount {

        [DataMember(Name = "sf__Id")]
        public new string SalesforceId {
            get => base.SalesforceId;
            set => base.SalesforceId = value;
        }

        [DataMember(Name = "sf__Created")]
        public bool SalesforceCreated { get; set; }

    }

Как вы можете видеть, кроме имени класса и класса, который они расширяют, оба класса идентичны.

Эти классы существуют только потому, что я использую ServiceStack.Text для преобразования базового класса в CSV, загружаю CSV в Salesforce через Bulk API 2.0 (для которого SaleforceId должен быть помечен [IgnoreDataMember] или загрузка будет FAIL ) , а затем будут извлечены вновь созданные записи с вновь созданными идентификаторами SalesforceIds, которые будут снова присвоены соответствующим записям со следующим кодом:

        public Dictionary<string, T> Update<T, TU>(Dictionary<string, T> oldSObjectBySalesforceAccountId, RelayerContext context)
        where TU : T
        where T : AlternativeIdentifiable {
            IConfiguration config = context.Config;
            string url = $"{config["SalesforceInstanceBaseUrl"]}/services/data/{config["SalesforceVersion"]}/jobs/ingest/{context.job.Id}/successfulResults";

            this.restClient.Get(url, context.token)
            .FromCsv<List<AlternativeIdentifiable>>()
            .ForEach((updatedBankData) => {
                if (oldSObjectBySalesforceAccountId.TryGetValue(updatedBankData.GetAlternativeId(), out T oldSObject)) {
                    oldSObject.SalesforceId = updatedBankData.SalesforceId;
                }
            });

            return oldSObjectBySalesforceAccountId;
        }

Поскольку это решение может в конечном итоге поддерживать дополнительные объекты SO, для создания поддержки потребуется много почти идентичных классов.

Есть ли лучший способ?

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