Ответы пользователя по тегу ООП
  • Каким должен быть паттерн Adapter?

    serginhold
    @serginhold
    Адаптер адаптирует интерфейс..

    Допустим есть класс для форматирования текста TextFormatter, и есть у него метод format().
    По какой-то причине в проекте решили отказаться от этого класса, и использовать другой NewFormatter, типа другой на много лучше и няшный весь такой, но у него нет метода format(), у него есть метод formatText().
    И чтобы по всему проекту не искать вызов старого класса, правя кучу кода, можно написать адаптер, подменив им старый класс.
    Пусть будет NewTextFormatterAdapter. У которого пишем метод format(), в котором идёт вызов нового класса, что-то вроде:
    return this->newFormatter->formatText();
    Ответ написан
    6 комментариев
  • Как расширить существующую модель на PHP?

    serginhold
    @serginhold
    как бы сначала надо ответить на вопрос "где это нужно и зачем"

    Вариант 1
    Не надо делать ооп ради ооп, просто в класс Message добавь метод getUrl()

    Вариант 2
    Message это какой-то сторонний класс, и нет возможности его изменить, по этому делаем над ним декоратор.

    class MessageDecorator
    {
        private $message;
    
        public function __construct(Message $message)
        {
            $this->message = $message;
        }
    
        public function getTitle()
        {
            return $this->message->getTitle();
        }
        
        public function getText()
        {
            return $this->message->getText();
        }
    
        public function getUrl()
        {
            // create url
            return 'url';
        }
    }
    
    $message = new MessageDecorator(new Message($title, $text));
    $url = $message->getUrl();


    Вариант 3
    Выносим генерацию url в отдельный сервис

    class UrlService
    {
        public function getMessageUrl(Message $message)
        {
            // create url
            return 'url';
        }
    }
    
    $message = new Message($title, $text);
    $urlService = new UrlService();
    $url = $urlService->getMessageUrl($message);
    Ответ написан
    2 комментария
  • Как правильно передать объект в класс и стоит ли это делать?

    serginhold
    @serginhold
    Но теперь у меня появилась необходимость сделать так, чтобы в разных местах API я мог указать в каком формате мне отдать текст поста (с html тегами или BB кодами).

    Как бы текст хранится в одном каком-то формате.
    Если хочется хранить в разных форматах, то должен хранится и соответствующий флаг.

    А так задача выглядит как заметить html теги на bb-коды.
    И тогда это вообще не должно быть в entity, т.к. это просто форматирование.

    Просто отдельно на выводе, что-то вроде:
    echo $bbFormatter->format($html); // $html - $entity->getText()
    Ответ написан
    Комментировать