Собственно пытаюсь двигаться в сторону хорошего кода и хочу раз и на всегда решить головную боль с хелперами.
Предположим есть следующая ситуация: Нужно отрендерить данные товара в виде.
У нас есть сущность:
class Product {
protected $name;
protected $description;
protected $price;
protected $amount;
public function setName($name)
{
...
}
public function setDescription($description)
{
...
}
public function setPrice($price)
{
...
}
public function setAmount($amount)
{
...
}
public function getName()
{
...
}
public function getDescription()
{
...
}
public function getPrice()
{
...
}
public function getAmount()
{
...
}
}
Все хорошо все здорово. Теперь задача показать данные товара на странице. Тут возникают следующие вопросы:
- Мультиязычность (все не так плохо, мы можем засетить нашу сущность уже нужными данными, которые были получены ранее)
- Цена. К примеру я хочу видеть не 1210.23783, а $ 1 210.24. Тоесть потребуется использовать хелпер, который приведет float в читабельную строку.
- Количество, тоже самое хочу видеть не 435435, а 435 435 единиц (к примеру)
Конечно все эти хелперы уже у нас есть и код в виде может выглядеть вот так:
<p class="price">{{ Currency::formatString($product->getPrice()) }}</p>
Однако не всегда бывает удобно протаскивать хелперы в вид. Особенно если используется какой-то шаблонизатор и тп.
Было бы куда удобнее сделать, что-то такое:
<p class="price">{{ $product->getPriceString() }}</p>
Где метод $product->getPriceString() возвращает то что нам нужно. Тут получается 2 проблемы:
- Сущность становится зависимой от хелпера.
- Что если к примеру для админки нужно другое отображение. Ну скажем, если кол-во меньше 10, то подсветить красным цветом?
Подскажите пожалуйста как вообще правильно решать подобные вещи, отдельно хелперами во вьюшке или все-же можно засунуть дополнительные методы в сущность ?