|
8.2, Хранение констант, не изменяемых пользователем | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
Humandra
26.02.12
✎
13:43
|
Добрый день!
А скажите-ка, как вы храните, и, главное, получаете константы - не в терминах 1С, а редкоизменяемые значения? Например, где-то в программном коде используется строка "Разделитель строки адреса" = ", ". Очевидно, что плохим тоном будет прямо так и писать в коде: Улица + ", " + Дом + ", " + итп, ибо в теории таки может потребоваться изменить разделитель, и искать его по всему коду - замучаешься. Можно просто в каком-то модуле определить метод: ПолучитьРазделительСтрокиАдреса(), тогда эта проблема не актуальна. Но я смотрю, многие для таких вещей таки заводят константы в понятии 1С. Вопрос: это оправдано? Зачем так делают? Ведь, как я поняла, константа 1С хранится в БД, при ее получении ее придется либо кэшировать, либо тратиться на обращение к БД, либо надеяться, что 1С ее сама закэширует (а она это делает?). |
||||||||||
1
Rie
26.02.12
✎
13:45
|
(0) Многие - это кто?
|
||||||||||
2
Мизантроп
26.02.12
✎
13:45
|
> Ведь, как я поняла, константа 1С хранится в БД, при ее получении ее придется либо кэшировать, либо тратиться на обращение к БД, либо надеяться, что 1С ее сама закэширует (а она это делает?).
живите проще, не думайте о таких вещах |
||||||||||
3
PVV65
26.02.12
✎
13:46
|
(0) Однозначно
Просто метод в модуле |
||||||||||
4
golden-pack
26.02.12
✎
13:48
|
Разве это узкое место ?
Просто метод в модуле |
||||||||||
5
acsent
26.02.12
✎
13:49
|
ПолучитьРазделительСтрокиАдреса() - бессмысленная универсализация
|
||||||||||
6
Humandra
26.02.12
✎
14:04
|
(5) Ну это для примера про адрес было. Почему бессмысленная? Предлагаете такие константы вообще прямо в коде встраивать и несколько раз повторять? Не, на такое я точно не согласна.
(1) В двух отраслевых встречала уже примеры такого. Вот и пытаюсь понять - это они странным занимаются, или я чего-то не понимаю (2) Ага, а потом меня через полтора года будут хорошими словами поминать? (4) Это не узкое место, это просто пример. А вот, скажем, что-то типа константы "Максимальный уровень иерархии" для ускорения выхода из зацикливания (в коде типа разворачивания рецептур, но не про рецептуры, предметка другая) - однозначно может стать узким местом. |
||||||||||
7
Rie
26.02.12
✎
14:16
|
(6) Это они таким странным занимаются. Разделитель полей в строке - это всё же часть алгоритмов и структур данных, а не сами данные. Равно как и ПолучитьРазделительСтрокиАдреса() - явное излишество. Причём, на мой взгляд, несуразное - "вовне" не нужно знать разделитель строки адреса, скорее, понадобятся методы РазобратьАдрес() и СобратьАдрес(), внутри которых спокойненько можно использовать литерал.
|
||||||||||
8
Humandra
26.02.12
✎
15:07
|
(7) Ну не знаю.
Допустим, есть код типа "в цикле по иерархии собираем полное название адреса путем конкатенации с разделителем": Для Каждого Из Цикл ПолныйАдрес = ПолныйАдрес + Разделитель + ЧастьАдреса; КонецЦикла Потом надо вырезать первый, лишний, разделитель, т.е. в случае разделителя ", " - первые 2 символа. Для этого можно писать в коде: "вырезать 2 первых символа" или "вырезать длину разделителя". Если идти первым путем, то если разделитель таки придется заменить, например, на "запятая и два пробела" (а это не 100% исключено, так как в некоторых организациях у меня был такой в качестве разделителя адреса, чтобы потом при обмене с другой не 1С-базой не спутать части адреса с уточнениями типа "д.2, магазин "Березка", у первого столба), то есть можно забыть и не поменять "вырезать 2 первых символа" на "вырезать 3 первых символа". По моему надежнее все же определять такие вещи в одном месте, а не в куче разных. |
||||||||||
9
acsent
26.02.12
✎
15:09
|
(6) приведи пример где данная универсализация не бессмысенна
|
||||||||||
10
Лефмихалыч
26.02.12
✎
15:12
|
например
Просто метод в модуле |
||||||||||
11
Rie
26.02.12
✎
15:18
|
(8) Так а в чём сложность задачи-то? Ради чего копья ломать?
Не говоря уже о том, что можно и не резать ничего: ПолныйАдрес = ""; Разделитель = ""; Для Каждого ХЗ Из ТЗ Цикл ПолныйАдрес = ПолныйАдрес+Разделитель+ХЗ.Адрес; Разделитель = ", "; КонецЦикла; // Захотелось вместо ", " использовать "а ещё, свет очей моих, " - изменяем всего одну строку. Однако всё это - ну уж очень несерьёзно. А заводить ради этого метод - глупо. Ну а константу в базе создавать - вообще маразм. |
||||||||||
12
Humandra
26.02.12
✎
16:02
|
(11)
Все равно не в одном месте - как минимум еще в методе разбора. Ваш вариант мне в голову не пришел. Внешне он красивей. Но присваивание лишнее зато на каждой итерации. |
||||||||||
13
Rie
26.02.12
✎
16:09
|
(12) Итого - 2 метода. Далеко не смертельно. И, IMHO, не основание - добавлять к ним ещё и 3-й, название которого - ПолучитьРазделительСтрокиАдреса - при чтении очень легко спутать с НадоБыЗаглянутьЧтоЭтаФункцияДелаетНеМожетЖеБытьЧтобыЕеСоздалиРадиЗаменыОдногоЕдинственногоЛитерала.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |