@UsenkoJaroslav Ответ на этот вопрос мельком затронут в конце поста https://ru.bem.info/forum/issues/158/
Если отвечать более развернуто, то здесь можно провести аналогию с ООП. Как мы определяем, как лучше выразить координаты какого-нибудь класса
Figure
: с помощью обычного массива[x, y]
или отдельным классомPoint
? Ответ зависит от того, будут ли у сущностиPoint
свои собственные методы и, скажем, валидация, что точка попадает в область допустимых значений, или достаточно просто указать два числа.Примерно таким же принципом мы руководствуемся, определяя, нужно ли реализовывать отдельный блок для сущности, которая по всем признакам является неотъемлемой частью другой сущности и, казалось бы, должна быть выражена элементом.
Если оказывается, что она достаточно простая, то, конечно, будет реализована элементом. Но если, как в случае с
menu-item
у нее оказывается приличное количество собственных методов, набор разных модификаторов и шаблонов (см. https://github.com/bem/bem-components/tree/v2/common.blocks/menu-item), то вместо того, чтобы сильно раздувать сложность блокаmenu
, можно вынести это знание в отдельный служебный блок. Т. е. это все тот же принцип, который рекомендует избегать большой портянки кода и разбивать его на более мелкие модули — так с ними проще работать.@tadatuta Огромное спасибо за ответ!