Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Абасс... обсудите рахитекурту

3762  1 2 3 4 5 6 7 8 все
Срыв покровов патриот20.05.24 13:24
NEW 20.05.24 13:24 
в ответ AlexNek 20.05.24 11:18
А отчего, кстати у Param MaxValue отсуствует MaxValue смущ

😵‍💫

#61 
alex445 патриот20.05.24 13:24
NEW 20.05.24 13:24 
в ответ AlexNek 20.05.24 12:22
объекта ParamVolatile

речь об объекте Param

Ну так в Param есть MaxValue, играющее роль и Value. Если значение одно, то какая разница, как его назвать? А мне удобно назвать для совместимости с классом-наследником. Или назову его Value - тогда будет удобно в базовом классе, а в наследнике придётся приписать коммент, что Value играет роль максимального значения.


Если же я введу третью сущность (Value, MaxValue, CurrentValue), то это будет дублирование, т.к. Value и MaxValue играют одну роль и одинаково валидируются, и с ними одинаково обращаются клиенты классов Param и ParamVolatile. А вот клиентам будет путаница - все алгоритмы нужно перестроить, чтобы Value и MaxValue воспринимались одинаково. Проще в классах Param и ParamVolatile ввести одну условность и откомментить её, чем перелопачивать алгоритмы.

#62 
alex445 патриот20.05.24 13:25
NEW 20.05.24 13:25 
в ответ Срыв покровов 20.05.24 13:24

Да он описался. В хорошем смысле. )))

#63 
AlexNek патриот20.05.24 13:26
AlexNek
NEW 20.05.24 13:26 
в ответ alex445 20.05.24 13:20
Переименуем MaxValue в Value в обоих классах. Лучше стало?

Нет конечно. Не следует торопиться. У нас пока еще нет реализации. Обсуждаются только проблемы "модели".


Похоже для Value нам еще нужен еще UpperLimit, так как LowerLimit всегда 0. /Специально выбрал какое то другое имя чтобы не путатся/

#64 
AlexNek патриот20.05.24 13:28
AlexNek
NEW 20.05.24 13:28 
в ответ Срыв покровов 20.05.24 13:24

ну так уж в оригинале, сорри

ограничения для MaxValue у класса Param

#65 
AlexNek патриот20.05.24 13:30
AlexNek
NEW 20.05.24 13:30 
в ответ alex445 20.05.24 13:24
Ну так в Param есть MaxValue, играющее роль и Value

как я понял для каждого значения нужно еще и ограничение или нет?

#66 
AlexNek патриот20.05.24 13:31
AlexNek
20.05.24 13:31 
в ответ alex445 20.05.24 13:25

Не, не хотел вводить новые названия, вот же есть для всех параметров

public double CurrentValue { get; set; }
public double MaxValue { get; set; }
#67 
AlexNek патриот20.05.24 14:29
AlexNek
NEW 20.05.24 14:29 
в ответ alex445 20.05.24 13:24
А вот клиентам будет путаница - все алгоритмы нужно перестроить,

то есть есть еще одно ограничение о котором умолчали?


Ну если идет речь о правке Big ball of mud, то и обсуждать особо нечего.

#68 
alex445 патриот20.05.24 15:59
NEW 20.05.24 15:59 
в ответ AlexNek 20.05.24 13:26, Последний раз изменено 20.05.24 16:05 (alex445)
Похоже для Value нам еще нужен еще UpperLimit, так как LowerLimit всегда 0. /Специально выбрал какое то другое имя чтобы не путатся/

как я понял для каждого значения нужно еще и ограничение или нет?

Да. Любой Param или ParamVolatile имеет свой скажем так глобальный максимум и минимум, который они не могут превышать. И эти максимум и минимум я храню в валидирующем коде, а не в самих Param или ParamVolatile. А у ParamVolatile есть ещё текущий максимум, который он не может превышать, пока этот текущий максимум не изменится. У Param значение одно и оно редко меняется, поэтому оно валидируется "глобальными" максимумом и минимумом. У ParamVolatile же два значения - текущее, и текущий максимум - и они тоже валидируются через глобальные максимум и минимум, плюс текущее значение валидириуется через текущий максимум. Т.е.:


  1. и у Param, и у ParamVolatile все значения валидируются через глобальные валидаторы
  2. значение у Param и текущий максимум у ParamVolatile валидируются через глобальные валидаторы одинаково
  3. клиентский код работает со значением Param и с текущим максимумом ParamVolatile одинаково, т.к. эти значению играют одинаковую роль (если бы ParamVolatile не изменялся в текущих пределах, то всегда был бы равен текущему максимуму - т.е. аналогично просто значению из Param).
  4. текущее значение у ParamVolatile валидируется ещё и через текущий максимум


Это всё говорит о том, что при имплементации этих условий лучше бы для текущего максимума ParamVolatile унаследовать логику работы значения Param. И назвать их одинаково. А вот как конкретно - MaxValue или просто Value - другой вопрос, и больше к удобству или пониманию. Код работать будет с любым названием, если будут удовлетворяться все пункты выше.


По-моему, вы просто не можете себе представить, что за ParamVolatile такой может быть. А это просто - любое значение, которое расходуется и пополняется, и максимальная величина пополнения тоже может изменяться. И максимальная величина пополнения играет ту же роль, и так же обрабатывается многим клиентским кодом (например, он ожидает одинаковое имя свойства, а не делит их на два разных, не производит распознавание и ветвление), как и просто величина для значения, которое не расходуется и не пополняется, а просто есть. Я привёл пример скорости и запаса топлива. Скорость изменяется, но может быть и постоянной в течении какого-то времени, а топливо тратится непрерывно. Т.е. запас топлива более волатильная величина, чем скорость. Плюс топливо можно пополнить, но не более какой-то границы, а саму эту границу можно сдвинуть (у меня бак изменяемого объёма, или я канистры могу с собой взять и тасовать их - не важно).


Можно ещё сказать, что есть просто две величины - менее волатильная и более волатильная. И если менее волательную надо валидировать один раз при любом изменении, то более волатильную - дважды: текущее значение на две границы - волатильную и постоянную, и волатильную границу - на значение постоянной границы.

#69 
alex445 патриот20.05.24 16:01
NEW 20.05.24 16:01 
в ответ AlexNek 20.05.24 14:29
А вот клиентам будет путаница - все алгоритмы нужно перестроить,

то есть есть еще одно ограничение о котором умолчали?

Да, но оно простое - имена значения Param и текущего максимального значения ParamVolatile должны быть одинаковыми. Сделай это, и клиентский код будет нормально работать.

#70 
AlexNek патриот20.05.24 16:44
AlexNek
NEW 20.05.24 16:44 
в ответ alex445 20.05.24 15:59
вы просто не можете себе представить, что за ParamVolatile такой может быть

https://ru.wikipedia.org/wiki/Вола�%...

и не только это смущ

#71 
alex445 патриот20.05.24 17:28
NEW 20.05.24 17:28 
в ответ AlexNek 20.05.24 16:44

Как всегда, в английском варианте больше и подробнее, и что разные волательности бывают. Я просто выбрал название, которое считаю более подходящим.

#72 
AlexNek патриот20.05.24 19:42
AlexNek
NEW 20.05.24 19:42 
в ответ alex445 20.05.24 17:28
Я просто выбрал название, которое считаю более подходящим.

Когда долго живешь в проекте, то уже точно знаешь в какую дырку нужно вставить какую макаронину. И всё там кажется знакомым и понятным.

Когда же на это же самое смотрит кто то посторонний, то он обычно видит какую-то груду мусора.

Тоже самое было бы если бы и я какую то проблему рассказывал смущ

Но уж если сильно хочется иметь "изменчивость", это скорее variability, changeability и море других. Хотя volatility тоже как бы в этом ряду, мне он воспринимается прежде всего как финансовый термин. Особенно на русском.


Если у меня есть параметр который имеет значение и если у меня есть набор параметров, то я буду всегда ожидать в наборе тоже самое значение, а не что то совсем другое. И мне абсолютно наплевать как часто что меняется. Данные это данные.

#73 
MrSanders коренной житель20.05.24 19:47
NEW 20.05.24 19:47 
в ответ AlexNek 20.05.24 19:42

volatile в смысле "нестабильный, часто меняющийся" подобрано правильно.

#74 
AlexNek патриот20.05.24 19:55
AlexNek
NEW 20.05.24 19:55 
в ответ alex445 20.05.24 15:59
и у Param, и у ParamVolatile все значения валидируются через глобальные валидаторы

кажется, что Штирлиц начал давал показания, но нет это только видимость спок


Видимо речь о подобной функции - double ValidateParam(value, min1, max1)

хотя на самом то деле она делает что то типа этого TransformValueToRange и min1, max1 определяются в конкретном классе Param


клиентский код работает со значением Param и с текущим максимумом ParamVolatile одинаково

Это вообще абсолютно гениальное решение.

В одном случае мне выдают количество чего то, а другом максимум чего то


Есть подозрение, что с тоннами, килограммами и граммами - подобный бардак.

#75 
AlexNek патриот20.05.24 20:02
AlexNek
NEW 20.05.24 20:02 
в ответ MrSanders 20.05.24 19:47
смысле "нестабильный, часто меняющийся" подобрано правильно

дело то не только в правильности. Хотя может это и мои личные тараканы. Подобное слово у меня ассоциируется с финансами и смотреть на него просто так, со стороны совершенно непривычно, в отличии от например unstable

#76 
alex445 патриот20.05.24 20:11
NEW 20.05.24 20:11 
в ответ AlexNek 20.05.24 19:42

Когда долго живешь в проекте, то уже точно знаешь в какую дырку нужно вставить какую макаронину. И всё там кажется знакомым и понятным.

Когда же на это же самое смотрит кто то посторонний, то он обычно видит какую-то груду мусора.

Тоже самое было бы если бы и я какую то проблему рассказывал смущ

Но уж если сильно хочется иметь "изменчивость", это скорее variability, changeability и море других. Хотя volatility тоже как бы в этом ряду, мне он воспринимается прежде всего как финансовый термин. Особенно на русском.

Я хотел максимально абстрагироваться от конкретной реализации и темы. У меня в проекте эти классы с параметрами по-другому называются.


Если у меня есть параметр который имеет значение и если у меня есть набор параметров, то я буду всегда ожидать в наборе тоже самое значение, а не что то совсем другое. И мне абсолютно наплевать как часто что меняется. Данные это данные.

По-разному бывает. У меня у данных есть значения, с которыми одна часть кода работает (с максимальными), и есть часть кода, которая работает лишь с текущими значениями волатильных параметров. Например, та часть кода, что делает постоянный расчёт в цикле по нескольку десятков раз в секунду, работает с волатильными значениями, а то, что отрабатывает раз в несколько секунд или вообще по событиям - с максимальными значениями волатильных параметров или обычными значениями обычных параметров. Просто вы наверное не привыкли к таким областям программирования. В каком-то смысле это минус - узкий взгляд на вещи. )))

#77 
alex445 патриот20.05.24 20:20
NEW 20.05.24 20:20 
в ответ alex445 20.05.24 20:11, Последний раз изменено 20.05.24 20:25 (alex445)

За спором о названиях упустили другую важную часть - переиспользование свойств базового класса. Вам такая запись не кажется незнакомой, чужеродной, странной?


public class Parent
{
    double maxValue;
    public virtual double MaxValue
    {
        get => maxValue;
        set => maxValue = ValidateMaxValue(value);
    }
}

public class Child: Parent
{
    public override double MaxValue
    {
        get => base.MaxValue;
        set
        {
            base.MaxValue = value; // use validation from base class
            // some additional code - can be additional child class validation also, like this:
            // base.MaxValue = ValidateMaxValueInChild(value);
        }
    }
}
#78 
AlexNek патриот20.05.24 20:25
AlexNek
NEW 20.05.24 20:25 
в ответ alex445 20.05.24 20:11
Просто вы наверное не привыкли к таким областям программирования.

Скорее я не привык к подобным извращениям смущ


что делает постоянный расчёт в цикле по нескольку десятков раз в секунду
что отрабатывает раз в несколько секунд или вообще по событиям

Если производительность меня не мучает, то мне абсолютно наплевать какая часть кода как часто вызывается. Не должно быть никаких подобных зависимостей.

#79 
alex445 патриот20.05.24 20:27
NEW 20.05.24 20:27 
в ответ AlexNek 20.05.24 20:25

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

#80 
1 2 3 4 5 6 7 8 все