Хорошо ли использовать магические методы поиска из Doctrine EntityRepository?

Я спрашиваю в контексте Symfony Framework.

Мне интересно, если это хорошая практика, чтобы использовать магические методы поиска (например, find ($ id), findByField ($ value) и т. Д …).

Эти методы не имеют тип возвращаемого значения и не определены вообще. Это заставляет мою IDE отмечать предупреждения вокруг них. Также я должен отмечать тип возвращаемого значения все время, когда я использую эти методы, чтобы выполнение кода работало с этими переменными.

В качестве решения я обычно пишу геттеры внутри пользовательских классов репозитория. В symfony docs есть пример такого геттера, который перегружает вариант магического метода findBy.

У меня тоже плохие чувства по поводу такой перегрузочной магии методов поиска, потому что она как бы смешивает мою реализацию репо с родительской реализацией EntityRepository.

Таким образом, я заканчиваю писать собственные методы получения, которые используют префикс «get» вместо «find».

Теперь, может кто-нибудь сказать мне, что является лучшей практикой и почему?

РЕДАКТИРОВАТЬ

Недавно я искал несколько способов оптимизации доктрины, и я нашел совет не использовать магические искатели, так что это еще один аргумент против магических искателей.

Я также прочитал доктрины о магических искателях и обнаружил, что:
http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html#magic-finders

Это очень ограниченные магические искатели, и это всегда рекомендуется расширять свои запросы, чтобы вручную писать запросы DQL. Эти методы предназначены только для быстрого доступа к отдельным записям, без связей и хороши для быстрого прототипирования кода.

Так что я, наконец, выработал собственное мнение (и пример использования) для поиска магии. Используйте их только для ускорения кодирования и всегда помечайте их как TODO, чтобы переписать их в пользовательские методы хранилища при очистке кода.

4

Решение

На мой взгляд, это тоже плохая практика. Я бы предложил вам использовать методы findBy ([]) и findOneBy ([]). Я полагаю, что когда я начал изучать symfony, у меня был случай, когда магические методы вообще не работали, потому что свойства моей сущности были названы с помощью подчеркивания.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector