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

Single Responsibility Principle (SRP)

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

Про этот принцип часто говорят и по-другому: у модуля должна быть одна ось изменений.

Важно правильно понимать слово "ответственность". В SRP это не "кто отвечает за код" и не "какой разработчик владеет модулем". Ответственность здесь - это код, который нужен для одной причины изменения, одного сценария или одного use case.

Если один и тот же модуль меняют:

  • из-за изменения расчета;
  • из-за изменения печатной формы;
  • из-за нового сценария обмена;
  • из-за нового UI-поведения;

то у него уже несколько осей изменений, а значит SRP нарушен.

Что означает в 1С

Для 1С это почти всегда вопрос о том, не превратился ли один общий модуль или объект документа в комбайн, где одновременно живут:

  • расчет;
  • проведение;
  • печать;
  • обмен;
  • уведомления;
  • работа формы.

Если эти части меняются по разным причинам, их лучше развести.

То есть полезно спрашивать не "про что этот модуль вообще", а "по какой причине мы будем его менять". Если ответов несколько, модуль, скорее всего, собран слишком широко.

Пример на 1С

Function Calculate(DocumentObject) Export

    TotalAmount = 0;

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

    Return TotalAmount;

EndFunction
Function GetPrintData(DocumentObject) Export

    PrintData = New Structure;
    PrintData.Insert("Number", DocumentObject.Number);
    PrintData.Insert("TotalAmount", DocumentObject.TotalAmount);
    Return PrintData;

EndFunction

Где полезен

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

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

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