БД. сейчас реализована, допустим, в виде отдельной функции.
мне нужно расширить функциональность. где-то нужно вывести sql в лог. где-то - записать этот sql в лог-таблицу внутри той же бд. где-то - возможно, запретить выполнение команды вообще. нужна некоторая гибкость, т.к. для разных вызовов могут быть разные требования.
я хочу обернуть эту оперцию в объект, который кроме параметров операции будет хранить набор callbacks, вызываемых в нужный момент.
примерно так:
https://pastebin.com/L2pECTAX
это адекватное решение, или есть более правильный паттерн?
а не проще сделать много функций, которые будут вызвать её? выглядит немного оверинженерно
с одной стороны да. с другой - я хочу дать колбекам доступ к внутренностям операции. потому что я не знаю, какая именно часть от нее мне может понадобиться в будущем. т.е. сейчас задача буквально такая: есть уже существующий апи с сигнатурой drop_tablespace(db, tablespace_name), выполняющий в оракл команду f'drop tablespace {tablespace_name}'. он используется в процессе А, пишет команду в logger.info, все довольны. мне нужно использовать этот апи в процессе Б, но при этом добавить логирование выполняемого этим апи sql в таблицу-лог этого процесса Б. зачем? затем. энтерпрайз, аудит, все дела. поправить процесс А (реализовать в нем этот паттерн) я могу, дублировать код не хочу.
может тогда просто иметь альтернативные реализации? в том числе некоторые как декораторы над этой
ты имеешь в виду, в данном конкретном случае, прописать этот sql в разных местах?
Обсуждают сегодня