169 похожих чатов

Что значит несколько моделей? из вью точка входа в модель

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

29 ответов

87 просмотров

так модель сама может состоять из нескольких классов

Alexander-Nosov Автор вопроса
Alexander Nosov
но точка входа из вью одна

я понимаю, но как модели шарят между собой одну инстанцию?

Alexander-Nosov Автор вопроса
Alexander Nosov
посмотри на RESUME в примере

не совсем понял как resume поможет в такой ситуации: у меня есть логика, состоящая из нескольких классов, например документ ссылается на договор, договор ссылается на партнера, партнер ссылается на ответственного и т.п. При сохранении документа я проверяю что все ок: все поля документа заполнены, договор действующий, партнер не заблокирован, отвественный не уволен. Потенциально 3 ответственности, 3 класса, каждый хочет че-то залогировать. Как это происходит. Каждый класс создает инстанцию лога, и возвращает ее потом или все они каким-то образом одну инстанцию шарят? Показать естественно я хочу все одновременно потом в самом конце

Alexander-Nosov Автор вопроса
Dmitry B
не совсем понял как resume поможет в такой ситуаци...

лог создается во вьюшке. в каждом классе в момент возникновения ошибки делаешь RAISE EXCEPTION (если дальшйшая работа невозможна) или RAISE RESUMABLE EXCEPTION (если можно продолжить сбор ошибок). В классах с бизнес логикой никаких логов и таблиц со сборщиками ошибок не нужно делать.

Alexander Nosov
лог создается во вьюшке. в каждом классе в момент ...

ну ок, это был мой первый вопрос по сути. Бизнес логика общается только эксепшенами, а у них есть противный недостаток - не умеют во много сообщений

Alexander-Nosov Автор вопроса
Dmitry B
ну ок, это был мой первый вопрос по сути. Бизнес л...

делаешь свой класс с исключением и туда в атрибуты хоть таблицу передавай

Alexander Nosov
лог создается во вьюшке. в каждом классе в момент ...

а просто информацию как в лог писать с таким раскладом? edit: вопрос снят, посмотрел код

Alexander Nosov
делаешь свой класс с исключением и туда в атрибуты...

Дмитрий намекает о том, что так делать не очень

Alexander-Nosov Автор вопроса
Dmitry B
все верно. Но это уже два класса

Почему? Класс для сбора логов один, а классов исключений хоть миллион

Alexander-Nosov Автор вопроса
Pavel
а просто информацию как в лог писать с таким раскл...

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

Alexander Nosov
Почему? Класс для сбора логов один, а классов искл...

ИМХО бизнес сообщения эффективнее всего собирать в бизнес логике, там же есть весь контекст, если хочется его приаттачить тоже. На этапе исключений - это очень накладно для вызывающей программы. По сути бизнес логика плюет ответственностью в контроллер и говорит давай-ка сам решай что важно, что не важно, что собирать, что не собирать. А контроллеру по сути пофиг, он тупой ему нужно только знать, продолжать или не продолжать

Alexander-Nosov Автор вопроса
Dmitry B
ИМХО бизнес сообщения эффективнее всего собирать в...

Ок, допустим стоит задача собрать все ошибки по множеству классов. Как ты будешь их передавать в единый лог?

Alexander Nosov
Ок, допустим стоит задача собрать все ошибки по мн...

У меня это singleton, который доступен всем. Можно сказать что это лог-сам-себе-контроллер. Я называю это аспектом

Alexander-Nosov Автор вопроса
Dmitry B
У меня это singleton, который доступен всем. Можно...

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

Dmitry B
У меня это singleton, который доступен всем. Можно...

А если у тебя модель состоит из 3 подмоделей. И по каждой модели надо сохранять в разные подобъекты slg. И потом вывести общий лог

Alexander Nosov
по сути это глобальная переменная, обернутая в кла...

Иногда это необходимо, поэтому и придумали аспектно-ориентированное программирование. Лишние связи решаются скрытием за интерфейсом. Считай лог - это часть среды, как переменная sy. Тебе же не западло читать sy-uname каждый раз где хочется, а не передавать это значение через параметр

Maksim A.
А если у тебя модель состоит из 3 подмоделей. И по...

сильно не вчитывался в переписку выше. Мы для реализации несколько логово и подобъектов использовали мультитон и/или контролирующий класс. Инстанции логов получаются через класс-контроллер. Сохранение - тоже через него.

Dmitry Mirchuk
сильно не вчитывался в переписку выше. Мы для реал...

Тоже вариант, если ид лога определяется на этапе инстанциирования, у меня это просто параметры метода save)

Dmitry Mirchuk
сильно не вчитывался в переписку выше. Мы для реал...

Ну у вас получается глобальный супер класс со списком инстансов конкретных подобъекты лога.

Maksim A.
Ну у вас получается глобальный супер класс со спис...

грубо говоря да. Класс, управляющий логом для отдельного продукта. В его рамках - поддержка любого числа подобъектов. Сохранение через него - таким образом сохраняется только то, что нужно (плюс у нас там дельты считаются, и отдельно обрабатываются коммиты и ролбеки)

Dmitry Mirchuk
грубо говоря да. Класс, управляющий логом для отде...

Отдельно обрабатываются коммиты и ролбэки? Подробней плиз. Получается (грубо) супер класс с таблицей инстансов. Сами инистансы - это обёртка над фм bal* Александр предложил своё видение обёртки над фм bal*. У вас с Дмитрием Б. (я так понимаю вы с одной команды) придумана обёртка, чтобы рулить несколькими (или одной) обёртками.

Maksim A.
Отдельно обрабатываются коммиты и ролбэки? Подробн...

с Dmitry B не знаком. Поэтому точно в разных командах работаем. В решении, которое сейчас используется у меня на проекте - есть класс менеджер. Он рулит логами. Логи могут быть как на базе баллога, так и другие - главное, чтобы они реализовывали z интерфейс. Над баллогом у нас также есть класс/классы, реализующие этот интерфейс. Теперь про коммиты-роллбэки - тут наша придумка. У нас управляющий класс реализует метод завязанный на событие cl_system_transaction_state - transaction_finished. Это событие возникает при явных коммитах и ролбэках. В нем мы принудительно сохраняем все дельты по логами (как баллоги, так и прочие). Таким образом даже при ролбэке наши логи сохранятся. Исключение - если лув не будет закрыт явно. Но это с этим мы справляемся, принудительно вызывая общее сохранение на верхних уровнях (например в методах dpc классов). А так как сохранение у нас происходит дельтами - лишняя информация не попадает в бд.

Maksim A.
Отдельно обрабатываются коммиты и ролбэки? Подробн...

У меня по сути не обертка над BAL_*. Не видел смысла. Есть только методы-конвертеры read и save

Dmitry Mirchuk
с Dmitry B не знаком. Поэтому точно в разных коман...

Про ролбэки и коммиты: т.е. я не смогу сам рулить процессом, когда сохранять лог в бд? Сохраняется автоматом при коммите. И можно подробней про дельты? Как высчитываете?

Maksim A.
Про ролбэки и коммиты: т.е. я не смогу сам рулить ...

рулить сам можешь. У нас специфика проекта - все логи обязаны быть сохранены. А если что-то пойдет не так, чтобы было сохранено помаксимуму. Поэтому для надежности мы сохраняем логи не только при явном вызове метода save у класса-менеджера, но и при любом завершении лувов. Если вдруг возникнет потребность управлять необходимостью сохранения - это легко допилить, на этапе конструктора. А реализация дельт - зависит от лога. Флаги, индексы последнего сохраненного сообщения, получение актуалки - как угодно. В бал логах не помню как у нас. Возможно смотрим, что уже было сохранено ранее, и пишем новое.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта