Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Правильно ли добавлять в сущность посторонние методы в symfony

#php #ооп #symfony #symfony3 #best_practice


Изучаю symfony, использую версию 3.4
Возник такой вопрос. У меня есть таблица domains со списком доменов и соответственно
сущность для этой таблицы с полями таблицы и геттерами-сеттерами для них.
Появилась необходимость выяснить в коде, есть ли у домена кириллические символы (русские
буквы). И возник вопрос, корректно ли будет с точки зрения best practices добавить
в сущность AppBundle\Entity\Domains метод вроде:

public function isCyrillic(){
    return preg_match('/[\p{Cyrillic}]/u', $this->name) === 1 ? true : false;
}


А потом добавлять в эту сущность ещё и ещё подобных методов? Или в сущности должны
храниться только описания полей таблицы и геттеры-сеттеры для них? А другие методы
нужно выносить в сервисы или ещё куда-то?
Интересует ответ именно best practices, т.к. хочется писать код корректно и не лепить
велосипеды. Нужно мнение профессионала)
    


Ответы

Ответ 1



Приведенный вами метод вполне укладывается в представление Enitiy. Туда подходит всё что может содержать префикс is|get|set|has и прочие. Сервисы могут иметь подобные методы, но сами они stateless, поэтому придётся на вход подавать эту самую сущность, что не очень практично. Репозитории так же сам по себе являются stateless, и служат для работы уже с самими сущностями, так что туда тоже не стоит относит подобные методы.

Ответ 2



Это нарушит принцип SRP. Класс не должен иметь несколько обязанностей. Обязанность данного класс - хранить и получать данные. Метод isCyrillic добавляет классу новую обязанность. А это может привести к дублированию кода и увеличению сложности класса. Вы не сможете воспользоваться этим методом в других местах или вообще в других проектах. Поэтому я бы вынес этот метод в отдельный сервис.

Комментариев нет:

Отправить комментарий