Re[5]: Как такое быстро считать?
От: RushDevion Россия  
Дата: 21.02.25 08:20
Оценка: +1
P>ваш вариант предложен чисто из оптимизационных мыслей или в моем варианте есть недостатки?
P>по идее в вашем варианте нужно знать что надо вызвать проставление статуса, а в моем всё само высчитается

Мой вариант — это простейший способ распараллелить вычисление статуса, только и всего.
Того же результата можно добиться, не меняя твой код.
var clients = new Client[100_000];
Parallel.For(0, clients.Lenght-1, i => { 
  clients[i] = new Client(...); // Здесь статус посчитается в процессе инициализации объекта
});


А с точки зрения чистоты ООП-дизайна я бы, скорее, вообще убрал поле Status из сущности клиента.
Раз уж на статус могу влиять самые разные внешние факторы (e.g. какие-то сезонные акции, например), то логичнее выделить его вычисление в отдельный доменный сервис.
Кроме того, не видя модификаторов доступа, непонятно, можно ли снаружи класса Client простым присваиванием поменять CurrentCashAmount, LastYearCashAmount и т.п.
Если можно, то это автоматически делает вычисленный статус невалидным, соответственно, хранить его бессмысленно.

Далее. Неужели всем эти 100_000K клиентов обязательно нужно знать статус именно в момент создания?
Может быть активная работа идет только с некоторым подмножеством клиентов, а остальные бесполезно висят в памяти, ждут, когда же к ним обратятся.
Если так, то и статус можно вычислять лениво, в момент обращения.
Типа такого:
class CurrentCashAmount {
   private string _status;
   public string Status => _status ??= StatusDefinder.Define(CurrentCashAmount, LastYearCashAmount, CurrentMonthExpenses, Age)
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.