Feature/korobka s detalkami#48
Conversation
|
|
||
| Лог.Отладка("Зарегистрирован класс параметров с префиксом <%1>, полей: %2", Префикс, ОписанияПолей.Количество()); | ||
|
|
||
| РеестрКлассовПараметров.Вставить(Префикс, ОписанияПолей); |
There was a problem hiding this comment.
кажется, тут может быть конфликт, если два дто объявят один и тот же префикс. может мержить массивы?
There was a problem hiding this comment.
Я думаю, что надо скорее падать в ошибку(если вообще что-то с этим делать)... Если мержить, можно получить очень странные исходы, например, раз уж совпали префиксы, то и поля могут совпасть, а вот валидация может отличаться...
из-за этого будет очень непредсказуемо ломаться логика
| // Вложенный DTO: параметры подключения | ||
|
|
||
| &ЗначениеПоУмолчанию("localhost") | ||
| Перем Хост Экспорт; |
There was a problem hiding this comment.
поля обязательно должны быть экспортными?
There was a problem hiding this comment.
А я, если честно не помню, как рефлектор с приватными полями работает... но по логике - это же ДТО, и поля дто должны быть публичные кмк...
| // DTO второго уровня: настройки базы данных с вложенным DTO подключения | ||
|
|
||
| &ЗначениеПоУмолчанию("main_db") | ||
| Перем ИмяБазы Экспорт; |
There was a problem hiding this comment.
а как быть с типизацией? если нет значения по умолчанию, но предполагается, что в поле лежит число? может затащить &Тип?
There was a problem hiding this comment.
Затащил тип, и прикрутил каст получаемых значений к ожидаемым типам.
3f0df21 to
5a071ac
Compare
Префикс задаётся дважды, одно из значений молча игнорируется
Запись = Новый Структура("Префикс, ОписанияПолей", Префикс, ОписанияПолей);
РеестрКлассовПараметров.Вставить(КлассОбъект, Запись);Но Из-за этого рассинхрон двух вызовов проходит молча: Менеджер.ЗарегистрироватьКлассПараметров(ДТО, "зарегистрированный");
Менеджер.Прочитать();
Менеджер.ЗаполнитьОбъектПараметров(ДТО, "реальный");
// АдресСервера = from-real, исключения нетОпечатка в любом из двух вызовов не диагностируется: побеждает тот префикс, что указан при заполнении, первый не значит ничего. Побочно это задевает сообщение об ошибке там же: ВызватьИсключение "Класс параметров с префиксом """ + Префикс + """ не зарегистрирован";Поиск идёт по объекту, а не по префиксу, поэтому текст указывает не на ту причину — разработчик пойдёт проверять префикс, хотя реальная причина в другом экземпляре класса. Какой был замысел? Префикс задумывался как атрибут регистрации, а в |
Что означает нумерация
|
bsl-language-server помечает символ U+2014 как ошибку InvalidCharacterInFile. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ОписаниеТипов.ПривестиЗначение возвращает Ложь для любой нераспознанной строки, поэтому "yes", "on" и опечатки вроде "treu" молча превращались в Ложь вместо ошибки. Значения перечислены явно (1/true/истина/да/yes/on и 0/false/ложь/нет/no/off, регистронезависимо), остальное вызывает исключение с именем поля. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Экземпляр создавался внутри цикла по свойствам, на каждое поле с аннотацией ВложенныйДТО. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
АннотацияВложенныйДТО не хранила параметр и не имела аксессора: объект аннотации создавался, но значение бралось мимо него, напрямую через РаботаСАннотациями. Класс приведён к виду АннотацияСиноним и АннотацияЗначениеПоУмолчанию - хранит имя и отдаёт его через ИмяКлассаДТО(). Ветка создания вложенного объекта по имени класса не была покрыта: фикстура ТестовыйДТОБазаДанныхАннотация вопреки своему комментарию инициализировала объект в конструкторе и не использовалась ни одним тестом. Фикстура приведена в соответствие назначению, добавлен тест. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ЗаполнитьОбъектПараметров и ЗаполнитьВложенныйДТО отличались
только источником объекта и коллекции описаний, остальные ~40
строк совпадали. Тексты логов уже начали расходиться
("Установка свойства" против "Установка вложенного свойства").
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ОписаниеПоляДТО хранило ссылку на экземпляр вложенного DTO, захваченную при регистрации, из-за чего описание было привязано к конкретному объекту: если свойство переприсваивали между регистрацией и заполнением, заполнялся прежний экземпляр. Описание сведено к метаданным, признак вложенности определяется по наличию описаний полей, а объект достаётся у владельца рефлектором при заполнении - так же, как верхнеуровневый объект приходит параметром. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Свойство с аннотацией ВложенныйДТО, у которого нет ни объекта, ни имени класса, давало предупреждение в лог и продолжало описание. Поле деградировало до обычного скаляра, и при заполнении в него попадала сырая ветка конфига - Соответствие вместо типизированного DTO. Теперь такое объявление вызывает исключение при описании класса. Логгер в ОписательДТО остался без использования и убран вместе с зависимостью от logos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ветка с XMLЗначение не была покрыта ни одним тестом, хотя поле ДатаЗапуска присутствовало во всех фикстурах с типами. Проверяется разбор строки вместе со временем и исключение на нераспознанном значении. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
КП-1.2 и КП-1.6 проверяли одно и то же исключение на обязательном поле, КП-1.3 и КП-1.7 - один и тот же синоним. Пары отличались только префиксом в конфиге. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Комментарий к переменной Тип и к УстановитьЗначениеПоУмолчанию утверждали, что тип выводится из значения по умолчанию, хотя он берётся из аннотации Тип. Комментарии в ПривестиЗначениеКТипу описывали поведение ОписаниеТипов, а не то, что делает сам метод. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Позволяет определять дто, с конкретными параметрами и составом, а потом получать обратно заполненный по правилам объект