Иллюстрация порядка вызовов бизнес-серверов в разных ситуациях

Следует учесть, что в бизнес-сервере может быть вызвано обновление объекта не через возвращаемый массив, а отдельным вызовом сервиса данных. В этом случае, надо учесть то, что бизнес-серверы будут вызываться для этого объекта отдельно.

Агрегатор, детейлы

Если имеется следующая ситуация c детейлами:

то бизнес-сервера при обновлении будут срабатывать в следующем порядке:

  • КлассАгрегатор
  • КлассДетейл

Наследование

Если имеется следующая ситуация с наследованием:

то бизнес-серверы при обновлении объекта класса Человек будут срабатывать в следующем порядке:

  • Существо
  • Животное
  • Млекопитающее
  • Человек

Интерфейсы

Можно прописать атрибут для привязки бизнес-сервера не только к классу, но и к интерфейсу. В этом случае все объекты класса-наследника от этого интерфейса будут обрабатываться данным бизнес-сервером. Если указано несколько интерфейсов с бизнес-серверами:

public class Class2:Class3, Interface3
{
//...
}

public class Class1:Class2, Interface1, Interface2
{
//...
}

то порядок срабатывания будет таким:

  • бизнес-сервер, привязанный к Class3
  • бизнес-сервер, привязанный к Interface3
  • бизнес-сервер, привязанный к Class2
  • бизнес-сервер, привязанный к Interface2
  • бизнес-сервер, привязанный к Interface1
  • бизнес-сервер, привязанный к Class1

Правила обновления объекта данных

Например, имеется следующая ситуация:

Если в бизнес-сервере для класса Товар исправлена Фирма-производитель и возвращена в методе бизнес-сервера, то для фирмы-производителя вызовется её бизнес-сервер. Важно понимать, что запрос для Товара был уже сгенеририван (это было выполнено сразу после отработки его собственного бизнес-сервера) и в бизнес-сервере Фирмы-производителя изменять Товар не следует - новые изменения не будут зафиксированы в БД.