ООП. Инкапсуляция, часть 2.

11.12.08

Разработка - Механизмы платформы 1С

Продолжаем обсуждать инкапсуляцию, как первую из основ объектного подхода к программированию.

Второй простой пример инкапсуляции.

Допустим, есть в конфигурации константа ОсновнаяФирма. И повсюду в конфигурации разбросаны вызовы Константа.ОсновнаяФирма. Как инкапсулировать эту константу и зачем (и в каких случаях) это надо делать?

Для начала отвечу на вопрос "как". Очень просто.

класс Константы = __Константы@MD {};  

Функция ОсновнаяФирма() Экспорт
Возврат Константа.ОсновнаяФирма;
КонецФункции

Вы спросите - зачем огород городить? Отвечаю. Мы отделили реализацию от представления. Скрыли реализацию за интерфейсом. Теперь мы можем свободно менять реализацию, оставив старый интерфейс. Кстати, отличный повод для подобного разделения - это несоответствие названия константы реальному состоянию дел. Вместо, или вместе со сменой идентификатора константы можно сразу провести данный рефакторинг. Все равно глобальным поиском трясти.

Примеры, когда нужно вдруг поменять реализацию.

1. Теперь вдруг понадобилось сделать константу периодической. Мы даже интерфейс можем не менять, а расширить:

класс Константы = __Константы@MD  
{
Справочник ОсновнаяФирма(Дата _Дата = ТекущаяДата());
};

Функция ОсновнаяФирма(_Дата) Экспорт
Возврат Константа.ОсновнаяФирма.Получить(_Дата);
КонецФункции

2. Вдруг провели измерения быстродействия и выяснили, что обращения к таблице констант занимают существенное время в работе конфигурации. Решение - кэшировать значения тех констант, которые в середине дня ну никак не могут поменяться. ОсновнаяФирма - одна из таких констант (обратный пример - это константа ДатаЗапретаРедактирования, ее кэшировать не стоит).

класс Константы = __Константы@MD {};  

Перем КэшОсновнойФирмы;
Процедура Конструктор()
КэшОсновнойФирмы = "";
КонецПроцедуры
Функция ОсновнаяФирма() Экспорт
Если КэшОсновнойФирмы = "" Тогда
КэшОсновнойФирмы = Константа.ОсновнаяФирма;
КонецЕсли;
Возврат КэшОсновнойФирмы;
КонецФункции

3. Мы решили разгрузить таблицу констант от блокировок. И хотим хранить значение основной фирмы в специальном справочнике.

класс Константы = __Константы@MD {};  

Функция ОсновнаяФирма() Экспорт
СпрКонстанты = СоздатьОбъект("Справочник.Константы");
СпрКонстанты.НайтиЗначениеПоКоду("ОсновнаяФирма");
Возврат СпрКонстанты.Константа;
КонецФункции

4. У константы не может быть двух идентификаторов, а вот в классе вполне может оказаться два (и даже больше) метода с разными названиями, но которые делают одно и то же. Зачем это может понадобиться - придумайте сами :)

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4495    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5286    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6405    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

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

06.10.2023    18469    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12086    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8811    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6275    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15980    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. fez 46 11.12.08 14:03 Сейчас в теме
2. vde69 925 11.12.08 14:30 Сейчас в теме
вот было-бы хорошо если бы расшифровал строку
класс Константы = __Константы@MD {};

а то далеко не все 1с ники понимают, чего это за синтаксис... видимо и шапку надо поменять.

На сколько я понял к 1с (обычной, без надстроек) это не имеет отношение???
3. fez 46 11.12.08 15:56 Сейчас в теме
(2) Естественно, к обычной 1с это не имеет отношения. Поскольку оригинальный язык 1С - не объектно-ориентированный, то об этом не может быть и речи.

Представленный синтаксис - это синтаксис 1С++.
4. fez 46 12.12.08 02:00 Сейчас в теме
5. пользователь 14.12.08 00:05
Сообщение было скрыто модератором.
...
6. fez 46 14.12.08 19:29 Сейчас в теме
(5) Я не помню, в восьмерке в обработке можно хранить какие-нибудь данные, или это чисто хранилище для методов?
8. пользователь 14.12.08 19:44
Сообщение было скрыто модератором.
...
10. fez 46 15.12.08 14:08 Сейчас в теме
(8) Эээ... А как можно без проперти гет/сет хранить данные?
Покажи кусочек кода, думаю, будет нагляднее.
7. fez 46 14.12.08 19:30 Сейчас в теме
Например кэширование, как во втором примере, можно сделать?
9. пользователь 14.12.08 19:49
Сообщение было скрыто модератором.
...
11. пользователь 15.12.08 15:11
Сообщение было скрыто модератором.
...
12. fez 46 15.12.08 15:24 Сейчас в теме
(11) А что тогда, по вашему, property get/set?
13. пользователь 15.12.08 15:42
Сообщение было скрыто модератором.
...
Оставьте свое сообщение