Инструменты рефакторинга БД Oracle (PL / SQL) - PullRequest
7 голосов
/ 06 октября 2009

Мне было интересно, есть ли какие-нибудь хорошие инструменты рефакторинга для баз данных Oracle и особенно для PL / SQL. Я работаю над проектом, где половина разработчиков работает с c #, а другая половина - с базой данных, где есть большая и сложная схема и большая база кода в pl / sql. Мы также используем sql server, но команда баз данных работает исключительно с Oracle.

Эта кодовая база активно разрабатывается и подвергается рефакторингу постепенно, но я был весьма удивлен, увидев, насколько плохи инструменты рефакторинга для Oracle (или, по крайней мере, по сравнению с Eclipse и Resharper).

Разработчики используют Toad, который имеет только базовую поддержку рефакторинга (вероятно, так как он, кажется, больше ориентирован на администратора баз данных, чем на разработку). Я раньше использовал Toad, но всегда предполагал, что для pl / sql было больше возможностей для работы с кодом, но я никогда не изучал его. Теперь, насколько я могу видеть, единственные рефакторинги, которые он предоставляет, - это метод извлечения (процедура) и переименование переменной. Я прочитал статью, в которой сравниваются sql developer и pl / sql developer, и они, похоже, не имеют лучшей поддержки для рефакторинга. Я быстро взглянул на проект инструментов данных eclipse, но не увидел, что они добавили поддержку рефакторинга с тех пор, как я последний раз использовал его (несколько лет назад).

Для Sql Server существует Sql Refactor, который при изменении структуры таблиц распространяется на хранимые процедуры. Для меня это намного чище и менее подвержено ошибкам, чем когда кто-то вручную обновляет все хранимые процедуры. В прошлом я использовал более старую версию этих инструментов в проекте, и они казались довольно хорошими, но немного медленными, но это было несколько лет назад и все еще можно было использовать.

Нечто похожее для Oracle уже очень помогло бы нашей команде разработчиков, поэтому я был бы признателен за некоторые советы относительно хороших инструментов рефакторинга для Oracle, если они существуют. Спасибо, Замотанный

1 Ответ

10 голосов
/ 06 октября 2009

Как это бывает, "D" в TOAD обозначает Разработчик , а не DBA . На самом деле многие администраторы баз данных анафематизируют TOAD и другие подобные инструменты.

Тебе не повезло. Насколько я знаю, нет инструментов для рефакторинга PL / SQL. Основная проблема заключается в том, что рефакторинг как концепция происходит от парадигмы ООП, а PL / SQL не является объектно-ориентированным. Он не поддерживает наследование или полиморфизм (*) . Это означает, что многие из методов, которые лежат в основе классической практики рефакторинга (скажем, как определено Фаулером) - абстракция, интерфейсы и т. Д. - не имеют аналогов в PL / SQL.

Следствием этого является то, что люди, которые привыкли проводить рефакторинг как часть своего концептуального инструментария, склонны избегать программирования на PL / SQL. Однажды я попал в жаркую дискуссию по списку TDD по этому поводу. В результате даже разработчики, которым нужны и оценены достоинства PL / SQL, предпочитают разрабатывать на языках с лучшей поддержкой инструментов, несмотря на п. 1 из Agile Manifesto .

Наиболее важным инструментом для рефакторинга является автоматическое модульное тестирование. Хотя в TOAD (я думаю) нет интегрированного модульного тестирования, в следующем выпуске Oracle SQL Developer будет. Существуют также автономные инструменты модульного тестирования. Я недавно упомянул пару из них в другой SO теме .

С точки зрения рефакторинга PL / SQL, чтобы соответствовать изменениям в базе данных, возможно, что большинство взаимодействий с таблицами должно быть недооценено созданными API таблиц, а не встроено в транзакционный PL / SQL. В этом счастливом мире нет необходимости в инструментах рефакторинга, нам просто нужно заново сгенерировать соответствующие API. В посте, на который я ссылаюсь выше, также упоминается QCGU, инструмент, который может это сделать. Конечно, когда у нас есть кодовая база PL / SQL, которая не организована таким образом, жизнь становится сложнее. Вы не удивитесь, узнав, что для реализации WELC Feathers в PL / SQL не так много инструментальной поддержки.

(*) Да, я знаю, что у Oracle есть типы, но они (а) SQL не PL / SQL и (б) сколько людей на самом деле создают API, используя их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...