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

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

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

29 ответов

41 просмотр

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

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 у класса-менеджера, но и при любом завершении лувов. Если вдруг возникнет потребность управлять необходимостью сохранения - это легко допилить, на этапе конструктора. А реализация дельт - зависит от лога. Флаги, индексы последнего сохраненного сообщения, получение актуалки - как угодно. В бал логах не помню как у нас. Возможно смотрим, что уже было сохранено ранее, и пишем новое.

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта