Избегайте исключений в английском языке при написании сущностей

Вы наверное знаете, что в английском языке есть исключения при преобразовании единственного и множественного числа некоторых слов. Их порядка 20
, и наиболее часто в реальных проектах могут встретиться следующие из них: Goods, News, Money, amount другие - реже.
Все проблемы возникают при работе с ними в общепринятых конвенциях наименования, когда вы работаете с множеством - вы используете переменную во множественном числе - $cars, при разложении или получении экземпляра модели - вы оперируете с единственном числом $car
И всё красиво и удобно, пока вы случайно не нарываетесь на одно из этих названий. Вы наверняка встречались с отображением новостей на сайте. Это один из примитивных конструкций, с которой сталкивался почти каждый разработчик. Как вы рендерили массив новостей?

foreach ($news as $new)?

Чувствуете подвох. И тут надо понимать что вы совершаете сделку с дьяволом. Приложение после этого стало слегка не правильно выглядеть семантически, потому что $new - это означает "новый", это не "новость" в единственном числе.
Как быть?
Стандартов отвечающих на этот вопрос нету. Самое главное придерживаться какой-то (единой) тактики

      0. Если вы решите добавить к единственному экземпляру суффикс, например $newsObject - вам придется для единого стандарта изменить и все случаи где такое встречается с нормальными словами. Не лучший вариант, не рекомендую

  1. Самое оптимальное что приходит - стараться избегать встречи с использованием этих слова. Например Goods - Товар, товары - можно заменить синонимом product products - продукт, продукты.
    Moneys и amount - легко заменяется на price prices
  2. Как видите особенностей в склонении довольно много, по этому придерживаться грамматической правильности - дорогое удовольствие. Если в команде нет приверженцев английской грамматики - можно пойти на сделку с дьяволом и называть переменные несуществующими словами $good, $new, $moneys, но я бы рекомендовал делать это в исключительных случаях, если первый вариант не прокатил.
  3. В качестве запасного варианта (в зависимости от построения вашей архитектуры) - можно выделить функцию рендера в отдельный компонент или изолированную функцию, которая будет оперировать уже с общей переменной $items у которой есть замечательное единственное число $item. Естественно у этого есть свои недостатки, у вас может возникнуть лишние слои и лишние вложенности внутри компонента/функции. Иметь дело с единственной ничего не говорящей о сущности переменной во всех скриптах может быть сложно для восприятия.
    (Если вы фанат SOLID - выбирайте последний вариант и не думайте)
  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 17
  • Комментариев: 0
  • Создан: 20.06.2020 14:20

Комментарии (0)