Перейти к содержанию

Информационный эксперт (Information Expert)

Information Expert говорит: ответственность стоит отдавать тому объекту, у которого уже есть нужные данные для ее выполнения.

Опора на ООП

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

Что показывает пример на 1С

  • Documents.SalesOrder сам считает итог по своей табличной части.
  • Клиентский код не вытаскивает строки документа наружу и не пересчитывает сумму во внешнем модуле.
  • Ответственность остается у объекта, который и так владеет нужными данными.

Пример

SalesOrder = Documents.SalesOrder.GetRef("...").GetObject();
TotalAmount = SalesOrder.GetTotalAmount();
Function GetTotalAmount() Export

    TotalAmount = 0;

    For Each ItemRow In Items Do
        TotalAmount = TotalAmount + ItemRow.Amount;
    EndDo;

    Return TotalAmount;

EndFunction

Где полезен в 1С

  • для расчетов по данным документа, формы или регистра;
  • для проверок, которые напрямую опираются на внутреннее состояние объекта;
  • когда внешний модуль начинает тянуть слишком много чужих данных только ради одной операции.

Когда принцип применяют неправильно

  • когда в объект заталкивают логику, требующую много внешних зависимостей;
  • когда данные распределены по нескольким подсистемам и одного "эксперта" просто нет;
  • когда ради формального следования принципу объект превращается в перегруженный модуль.