Контракт
Контракты — это элементы проекта, которые описывают (но не реализуют) набор свойств и методов (или только набор методов). Существует три вида контрактов:
Реализация свойств и методов, объявленных в контракте, находится в некотором элементе проекта. В этом случае говорят, что этот элемент проекта реализует данный контракт (подробнее).
Грубо говоря контракт описывает то, какие свойства и методы есть у элемента, который реализует этот контракт.
Контракты позволяют воплощать следующие парадигмы разработки:
- Полиморфизм. Могут существовать разные элементы проекта, реализующие контракт, но все они имеют набор одинаковых свойств и методов. Это те свойства и методы, которые объявлены в контракте. Поэтому вы можете одинаковым образом обращаться к данным разных элементов проекта, реализующих один и тот же контракт. Пример — справочники, Пример — структуры;
- Инкапсуляция. Контракт можно использовать для того, чтобы скрыть от других частей проекта реализацию некоторой части бизнес-логики. Вы можете объявить в контракте набор методов, которыми должны пользоваться другие части приложения, если им нужно получить данные из вашей подсистемы. Реализацию этих методов вы можете изменять от версии к версии, при этом остальная часть проекта не будет изменяться, т.к. она использует методы, объявленные в контракте. Пример контракта сервиса;
- Подписки на события. Например, элемент справочника Товары имеет событие ПередЗаписью, в котором описан некоторый стандартный алгоритм количественного учета. Но если в проект добавляется подсистема ценового учета, то перед записью экземпляра справочника необходимо выполнять ряд дополнительных действий, чтобы учесть изменение цены. Подсистема складского учета также потребует ряд собственных действий для учета товаров на складах. В этом случае, чтобы каждый раз не менять обработчик ПередЗаписью() справочника Товары, вы можете создать контракт сервиса с методом ПередЗаписью(), и реализовать его в каждой из перечисленных подсистем. А в обработчике события ПередЗаписью() справочника получить все реализации этого контракта, которые существуют в проекте, и выполнить их. Пример подписки на событие.
- Множественная реализация. Один элемент проекта может реализовывать несколько контрактов.