2015-02-02 4 views
1

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

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

+0

Лично, если бы было много сообщений о результатах, я бы * подумал, что вместо этого они помещают их в таблицу поиска. Таким образом, у меня есть возможность использовать эффективный запрос, чтобы получить их все одним глотком, вместо того, чтобы делать много аргументов if/then/else или case в процедурном коде. Но YMMV. –

ответ

4

Я думаю, что это вопрос вкуса. В моем приложении я помещал все коды ошибок в пакет ошибок. Все основные и обычно используемые константы я помещаю в отдельный пакет (без корпуса упаковки).

+0

Спасибо, очень полезно! – odinsride

3

Опять же, вопрос вкуса, но я склонен ставить список именованных констант на уровне спецификации пакета, а не на тело пакета, чтобы на них можно было ссылаться любой частью приложения. Если я когда-либо захочу изменить код ошибки, который использует c_err_for_specific_reason_x, он станет единственным местом для этого.

Если бы я хотел скрыть коды и поместить их в тело, у меня была бы функция get_error_code (p_get_error_name varchar), которая выполняла перевод, основываясь на том, что вы передаете действительное имя константы.

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

+0

Спасибо, очень полезно! – odinsride

0

Это ... дождитесь ... зависит!

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

Вот правило, которым я следую: Определите константы в пределах минимальной области действия. Поэтому, если константа используется только в рамках одной процедуры, определите ее в этой процедуре. Если он используется в нескольких процедурах, определите его в теле. Если он используется в другом месте кодом в других пакетах (или непакетах SP), но только при использовании определенного пакета, определите его в спецификации этого пакета. Если он используется другим кодом для общего использования, поместите его в отдельную спецификацию таких общих констант.