Следует ли обновить значение свойства с помощью метода или определить в получателе? - PullRequest
2 голосов
/ 11 мая 2019

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

Например, между этим:

        public double Balance { get; private set; }

        private void UpdateBalance()
        {
            if (Payments.IsNullOrEmpty())
            {
                Balance = 0;
            }
            else
            {
                double amountSum = 0;
                foreach (Payment payment in Payments)
                {
                    amountSum += payment.Amount;
                }
                Balance = amountSum;
            }
        }

И этим:

        public double OtherBalance
        {
            get
            {
                if (Payments.IsNullOrEmpty())
                    return  0;
                double amountSum = 0;
                foreach (Payment payment in Payments)
                {
                    amountSum += payment.Amount;
                }
                return amountSum;
            }
        }

Единственное различие, о котором я могу подумать, заключается в производительности, поскольку в первом случае геттер проходит черезВесь список каждый раз, когда мы пытаемся получить значение свойства.Однако вам не нужно беспокоиться о вызове метода Update каждый раз, когда вы вносите изменение, которое может повлиять на значение свойства, как во втором варианте.Это разница действительно значительная?Кроме того, есть ли причина выбирать один вариант из другого?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 11 мая 2019

Чтобы добавить в ответ Киани, если вы не возражаете против использования Linq, вы можете превратить свой код в одну строку.

private double Balance=>(!Payments.Any())?0:Payments.Sum(t=>t.Amount);
1 голос
/ 11 мая 2019

Ну, в первом методе для чтения баланса вы должны снова вызвать геттер, а во втором методе balance вообще нет, лично я предпочитаю второй метод , потому что оно генерирует значение во время вызова, так что вы можете быть уверены, что оно всегда обновляется и ему не нужно вызывать функцию, а затем читать значение, чтобы оно чище и более ремонтопригодны .

...