|
![]() |
#1 |
Administrator
|
Поскольку вопрос чисто предпочтений, то я (лично для себя) выработал следующие правила (при условии, что нет правил, установленных используемыми фреймворками):
Методы check* отвечают за одну проверку. Методы validate* отвечают за комплекс проверок (т.е. грубо говоря состоят из вызовов методов check*). При этом комплексов может быть много и они могут состоять из разного набора проверок (аналог привилегий и Duty в 2012). Я люблю делать проверочные методы методами объекта (а не статическими), чтобы иметь возможность обращаться к глобальным переменных классам или внутренним private-методам Сообщения, исключения, диалоговые окна - это все регулируется параметрами методов в зависимости от потребности (например, иногда вместо инфолога надо писать в таблицу текст ошибки). Ну и собственно все. Пример (абстрактный). Хочу написать алгоритм разноски для своей условной заявки на покупку. Разноска генерит проводку в ГК и приходную проводку в InventTrans. У меня будет: 1) проверка на открытость периода в ГК 2) проверка на открытость периода по складу (ValueOpen = Да) 3) проверка на наличие товара по необходимым аналитикам 4) проверка на наличие бюджета ... какие-то другие проверки. По бизнесу (к примеру) сначала выполняется проверка на наличие товара. Если он есть, то закупка не выполняется. Если товара нет, то выполняется проверка на наличие бюджета. После успешной проверки бюджета - выполняется разноска по складу и ГК. Я хочу сделать (условно) 4 метода check*, которые в свою очередь будут вызываться в разное время, причем они также могут быть вызваны пользователем по кнопке "Проверить" или "Предварительный просмотр проводок". При этом у меня будут методы validate*, которые будут вызывать эти методы check*: 1) validate на этапе проверки наличия товара 2) validate на этапе проверки бюджета 3) validate на этапе разноски Соответственно - наполнение этих validate-методов может быть разным, при этом, к примеру, проверку на открытость периода я могу вызывать в каждом validate-методе, но сама логика проверки у меня будет в едином методе check
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 08.08.2021 в 14:46. |
|
|
За это сообщение автора поблагодарили: mazzy (5), NetBus (3), dech (5). |
![]() |
#2 |
Участник
|
О, интересный подход.
А у тебя check-методы могут вызываться не из validate? И что насчет инфолога? ты допускаешь, что все они могут что-то выводить в инфолог? и что насчет диалога с пользователем? Ну, этот пресловутый Book_RU.validateDelete? |
|
![]() |
#3 |
Administrator
|
Конечно. Я же привел пример наличия кнопки "Проверка". validate - это некое событие в алгоритме, по результатам которого отрабатывает основной код (например, разноска).
Цитата:
Цитата:
Вообще - тут сложно вырабатывать какие-то правила - слишком сильно реализация зависит не только от бизнес-задачи, но и от места выполнения проверки. Пример 1. Разноска товарного расхода. Проверка необходимого в наличии количества выполняется до резервирования, но если резервирование уже прошло, то нет смысла проверять необходимое количество в наличии - оно гарантированно будет - в этом смысл резервирования. Пример 2 (AX2012). Проверка достаточности бюджетных средств. Если не используется функционал резервирования бюджета (который привязывает резерв к документу) и разносимый документ не указан в настройках контроля бюджета, то по сути бюджет может "пропасть" в любой момент, а значит его есть смысл регулярно проверять. Пример 3. Аналог примера 2, только речь идет про проверку на закрытость периода. Конечно период могут закрыть в любой момент, но все же нет смысла проверять закрытость периода условно при любом изменении нашей "заявки на покупку", потому что это для пользователя не столь важно, как, к примеру, неожиданная "потеря" бюджета. Я намеренно остаюсь в приведенных ранее мною примерах проверок, чтобы не распыляться. В общем - общая идея такова, что в некотором алгоритме всегда есть проверки, которые можно выполнять на любом этапе алгоритма, а есть проверки, которые есть смысл выполнять только на определенных этапах. Но в любом случае - мне нравится идея выделять всевозможные проверки в методы с префиксом check*, а уже вызывать из методов validate* только те проверки, которые необходимо выполнить именно в данном validate*. Я также понимаю, что одна и та же проверка может быть вызвана как программно несколько раз (из нескольких validate*), так и условно вручную по нажатию специальной кнопки.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 08.08.2021 в 19:59. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|