Skip to content

Feature/korobka s detalkami#48

Open
Segate-ekb wants to merge 24 commits into
oscript-library:masterfrom
Segate-ekb:feature/korobka-s-detalkami
Open

Feature/korobka s detalkami#48
Segate-ekb wants to merge 24 commits into
oscript-library:masterfrom
Segate-ekb:feature/korobka-s-detalkami

Conversation

@Segate-ekb

Copy link
Copy Markdown
Contributor

Позволяет определять дто, с конкретными параметрами и составом, а потом получать обратно заполненный по правилам объект

Comment thread src/Классы/internal/Классы/ОписательДТО.os Outdated
Comment thread src/Классы/internal/Классы/ОписательДТО.os Outdated
Comment thread src/Классы/internal/Классы/ОписательДТО.os Outdated
Comment thread src/Классы/internal/Классы/ОписательДТО.os Outdated
Comment thread src/Классы/АннотацияВложенныйДТО.os
Comment thread src/Классы/МенеджерПараметров.os Outdated

Лог.Отладка("Зарегистрирован класс параметров с префиксом <%1>, полей: %2", Префикс, ОписанияПолей.Количество());

РеестрКлассовПараметров.Вставить(Префикс, ОписанияПолей);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

кажется, тут может быть конфликт, если два дто объявят один и тот же префикс. может мержить массивы?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я думаю, что надо скорее падать в ошибку(если вообще что-то с этим делать)... Если мержить, можно получить очень странные исходы, например, раз уж совпали префиксы, то и поля могут совпасть, а вот валидация может отличаться...
из-за этого будет очень непредсказуемо ломаться логика

// Вложенный DTO: параметры подключения

&ЗначениеПоУмолчанию("localhost")
Перем Хост Экспорт;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

поля обязательно должны быть экспортными?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А я, если честно не помню, как рефлектор с приватными полями работает... но по логике - это же ДТО, и поля дто должны быть публичные кмк...

// DTO второго уровня: настройки базы данных с вложенным DTO подключения

&ЗначениеПоУмолчанию("main_db")
Перем ИмяБазы Экспорт;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Затащил тип, и прикрутил каст получаемых значений к ожидаемым типам.

Comment thread packagedef Outdated
@Segate-ekb
Segate-ekb requested a review from nixel2007 April 20, 2026 14:35
@coveralls

coveralls commented Jun 8, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 82.398% (+1.2%) from 81.167% — Segate-ekb:feature/korobka-s-detalkami into oscript-library:master

@Segate-ekb
Segate-ekb force-pushed the feature/korobka-s-detalkami branch from 3f0df21 to 5a071ac Compare July 9, 2026 08:02
@nixel2007

Copy link
Copy Markdown
Member

Префикс задаётся дважды, одно из значений молча игнорируется

ЗарегистрироватьКлассПараметров(КлассОбъект, Префикс) сохраняет префикс в реестр:

Запись = Новый Структура("Префикс, ОписанияПолей", Префикс, ОписанияПолей);
РеестрКлассовПараметров.Вставить(КлассОбъект, Запись);

Но ЗаполнитьОбъектПараметров(КлассОбъект, Префикс) принимает префикс повторно и использует только переданныйЗапись.Префикс не читается нигде в проекте. Поиск в реестре идёт по объекту: РеестрКлассовПараметров[КлассОбъект].

Из-за этого рассинхрон двух вызовов проходит молча:

Менеджер.ЗарегистрироватьКлассПараметров(ДТО, "зарегистрированный");
Менеджер.Прочитать();
Менеджер.ЗаполнитьОбъектПараметров(ДТО, "реальный");
// АдресСервера = from-real, исключения нет

Опечатка в любом из двух вызовов не диагностируется: побеждает тот префикс, что указан при заполнении, первый не значит ничего.

Побочно это задевает сообщение об ошибке там же:

ВызватьИсключение "Класс параметров с префиксом """ + Префикс + """ не зарегистрирован";

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

Какой был замысел? Префикс задумывался как атрибут регистрации, а в ЗаполнитьОбъектПараметров попал за компанию, или наоборот — заполнение одного ДТО из разных веток конфига было осознанным сценарием?

@nixel2007

Copy link
Copy Markdown
Member

Что означает нумерация КП- в комментариях к тестам?

В tests/ОписательДТО_test.os тесты помечены комментариями вида:

// КП-1.1: ОписательДТО читает аннотации свойств
// КП-2.1: Вложенный DTO - БазаДанных.Подключение
// КП-3.1: Приведение строки к числу по &Тип("Число")

Префикс КП- встречается только в этом файле и больше нигде в репозитории — ни в docs/, ни в README, ни в packagedef. Расшифровки нет, поэтому проверить, чему соответствует конкретный номер, читая только репозиторий, нельзя.

Что означает КП и где лежит документ, на который оно ссылается? Нумерация должна остаться в коде?

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

nixel2007 and others added 10 commits July 21, 2026 18:16
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants