0. lazarenko 192 20.06.18 16:09 Сейчас в теме

Принципы ООП в 1С на примере реализации pattern Decorator

В данной статье будет рассмотрен пример реализации GoF паттерна проектирования decorator в среде разработки 1С. Основная цель данного шаблона, это возможность динамического расширения функциональности базового класса. Сразу оговорюсь, т.к. в 1С нет ООП, это будет не чистый пример реализации данного шаблона, однако свою задачу данный пример будет решать.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. PerlAmutor 33 21.06.18 18:52 Сейчас в теме
Функция НайтиКонтрагента(Данные) Экспорт 
	Если ДанныеВерсии.Свойство("РежимПроверки") И ДанныеВерсии.РежимПроверки Тогда
		Возврат Неопределено;	
	КонецЕсли;


(0) Это можно немного улучшить, на мой взгляд, таким образом:

		Попытка
			 Выполнить(СтрШаблон("Объект.%1(, Истина)", Метод));
		Исключение
			 ОтсутствующиеМетоды.Добавить(Метод);
		КонецПопытки;
...
Функция НайтиКонтрагента(Данные = Неопределено, РежимПроверки = Ложь) Экспорт 
	Если РежимПроверки Тогда
		Возврат Неопределено;	
	КонецЕсли;
Показать
2. lazarenko 192 21.06.18 19:11 Сейчас в теме
(1) можно, только это ничего ж не меняет. Просто в моем варианте хорошо то, что параметр у метода один
3. PerlAmutor 33 21.06.18 19:22 Сейчас в теме
(2) Тоже верно. Тогда вопрос, тут ошибки нет случаем? А то параметр называется "Данные", а поиск свойства идет у "ДанныеВерсии":

Функция НайтиКонтрагента(Данные) Экспорт 
	Если ДанныеВерсии.Свойство("РежимПроверки") И ДанныеВерсии.РежимПроверки Тогда
		Возврат Неопределено;	
	КонецЕсли;
4. lazarenko 192 22.06.18 08:08 Сейчас в теме
(3) да это я ошибся когда в статью переносил, в приаттаченных обработках нор.
5. l1ike 16.07.18 07:52 Сейчас в теме
Ну раз уж интерфейсы в 1с появились, давайте уже и статические типы прикручивайте )))
Вы соответствие объекта интерфейсу когда проверять планируете? При старте программы или при создании объекта? Если при создании объекта, то выгода от интерфейсов, по моему, весьма сомнительна. А если при старте программы, тогда проще как в javascript транспиляторы писать.
6. badboychik 60 11.01.19 18:08 Сейчас в теме
Данные = Новый Структура("ИНН, КПП", КакойтоИНН, КакойтоКПП); // Входящий параметр теперь один, структура.
Интерфейс = Обработки.ПоискСправочника.Создать().Имплементация("ПоискСправочникаИнтерфейс");
Декоратор1 = Обработки.Декоратор1.Создать().Наследовать(Интерфейс).Имплементация("ПоискСправочникаИнтерфейс");
Контрагент = Декоратор1.НайтиКонтрагента(Данные);

Не превращайте 1С в богомерзкую яву! ))
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Программист 1С
Москва
Полный день

Программист 1С
Видное
Полный день