Абасс... обсудите рахитекурту
Я предложил предложить своё предложение для этой "простейшей задачи". Никто не захотел. Напомню задачу:
- текущее и максимальное значения одного параметра разнесены на два класса, но т.к. это один параметр, то они связаны - текущее зависит от максимального (текущее не может быть больше максимального), но не наоборот
- для каждого значения своя валидация - с учётом первого пункта связности двух параметров
Разнесены на 2 класса, т.к. составной параметр построен на базе простого, состоящего из одного значения - использует его инфраструктуру (поля, свойства, методы и т.д.) и валидацию. Всё просто. Не какое-нибудь многостраничное техзадание. Можно на собесах этим мучить. Типа задачка на полчаса. От силы час. Два класса, два свойства - смотрите, не запутайтесь, "сеньёры и ценные специалисты с ниипацо стажем". )))
Единственный вопрос - нафига разнесены?
Я уже 10 раз написал - функционал максимального значения у составного параметра точно такой же, как просто значения у простого параметра. Т.е. в составном простое значение используется как максимальное, и добавлено текущее значение.
Ребята, что с вами, это просто два жалких класса с парой куцых свойств на двоих же. Чего вы их так испугались?.. Ну хорошо, вам не нравится наследование. Тогда что? В нашем ООПешном загончике не так много вариантов для комбинирования - наследование, включение, пачка статических методов... Я что-то важное упустил?
Может, будем городить интерфейсы или фабрику фабрик? Два-то класса это слишком сложно, а вот инжекция фабрики на интерфейсах - это пахнет месяцем мозгового штурма, километров тестов, и всё это на сеньёрских зарплатах. ))
функционал максимального значения у составного параметра точно такой же, как просто значения у простого параметра
Предположим, что нам это важно, тогда для любого параметра должен быть объект
public double CurrentValue { get; set; } public double MaxValue { get; set; }
Так что
если у нас есть параметр1 Value, то он должен иметь CurrentValue и MaxValue
и есть параметр2 MaxValue, то и он должен иметь CurrentValue и MaxValue
В данном случае подобного не наблюдается.
функционал максимального значения у составного параметра точно такой же, как просто значения у простого параметраПредположим, что нам это важно, тогда для любого параметра должен быть объект
public double CurrentValue { get; set; } public double MaxValue { get; set; }Так что
если у нас есть параметр1 Value, то он должен иметь CurrentValue и MaxValue
и есть параметр2 MaxValue, то и он должен иметь CurrentValue и MaxValue
В данном случае подобного не наблюдается.
У нас есть просто параметры, которые относительно постоянны (в пределах определённого времени), и быстро изменяющиеся параметры, у которых значение может быстро изменяться между нулём и определённым значением - эти последние я называю составными, т.к. состоят из текущего и этого определённого. Это определённое значение не есть максимальное значение вообще, т.к. оно тоже может изменяться, но не так быстро, как текущее, а так же, как и значение обычного параметра. Но для удобства я называю его максимальным. А чтобы использовать общий класс (с общей функциональностью) для этого значения, я называю его MaxValue и в классе обычного параметра.
Я бы мог поменять MaxValue на просто Value - тогда название значения в обычном параметре стало бы более осмысленным, но в составном - менее, т.к. CurrentValue меняется от 0 до Value. Но тут либо то, либо другое - где-то название будет не очень соответствовать.
Суть-то не в названиях, а в реализации.
Вангую, что такого есть какой-нибудь пэттерн типа Subscriber или Notifier.
"Ты чё умничаешь, ты пальцем покажи!"
А этот паттерн проще, чем мои пару десятков строчек, из которых треть - скобки?
У нас есть просто параметры, которые относительно постоянны (в пределах определённого времени), и быстро изменяющиеся параметры
Опять что то не из той оперы. Это скорее к расположению элементов ввода. Что то еще вы батенька скрываете
Я бы мог поменять MaxValue на просто Value - тогда название значения в обычном параметре стало бы более осмысленным, но в составном - менее
Это сразу говорит о том, что что то не в порядке.
Суть-то не в названиях, а в реализации.
реализация дело вторичное, главное "модель системы".
У нас есть просто параметры, которые относительно постоянны (в пределах определённого времени), и быстро изменяющиеся параметрыОпять что то не из той оперы. Это скорее к расположению элементов ввода. Что то еще вы батенька скрываете
Это не элементы ввода, а элементы отображения. Есть параметры, которые относительно постоянные и описываются одним числом, а есть которые изменяются быстро (расходуются и пополняются) - им нужно два числа - максимальное значение и текущее.
Например, скорость обозначается параметром с одним числом (текущая скорость), а топливо - параметром с двумя числами (макс. топлива и текущий объём). Чтобы не делать два совсем разных типа параметров, сделал базовый тип с одним значением, и второй унаследовал от него, добавив текущее значение.
А отчего, кстати у Param MaxValue отсуствует MaxValue
Где отсутствует? У меня присутствует. Это у ParamVolatile отсутствует поле maxValue, т.к. используется поле базового класса через свойство базового класса. У ParamVolatile свойство MaxValue это обёртка над базовым одноимённым свойством.
у Param MaxValue отсуствует MaxValue ... Где отсутствует? У меня присутствует.
у Param MaxValue отсуствует MaxValue ... Где отсутствует? У меня присутствует.
Пройдите по моей ссылке и попробуйте отследить выполнение кода, если присвоить свойству MaxValue объекта ParamVolatile какое-нибудь значение. Обратите внимание на
base.MaxValue = value;