Стоит ли включать имя сущности в имя метода репозитория?
Как лучше именовать методы репозитория,
так:
EntityRepository::getListBySomeField()
Или так:
EntityRepository::getEntityListBySomeField()
Желательно аргументировать ответ. Так же интересно было бы узнать масштаб проекта для которого тот или иной подход оказался более подходящим и специфику, повлиявшую на решение о выборе одного из них.
Ответы (1 шт):
Повторяющиеся префиксы или суффиксы или внезапные вставки в середину имени метода, константы, переменной, класса или пакета чаще всего означают, что надо выделить новую абстракцию.
Например:
$userId, $userName -> class User{$id, $name}
function getFromDb, function putInDb -> class Db {function get, function put}
class CliCommand, class CliOptions -> namespace cli {class Command, class Options}
Но в сообществе php-разработчиков очень популярны бесполезно повторяющиеся суффиксы и префиксы. Их можно и нужно удалять. Ведь у любой переменной, функции, класса есть доступный контекст.
Взгляните:
$user = $usersRepo->selectOne(); // что же возвращает метод selectOne?
class Programmer {
function writeCode() {...} // кто же пишет код?
}
namesapce eshop {
class Order {...} // Заказ или порядок?
}
namespace SQL {
class Order {...} // Порядок или заказ?
}
Хороший код не нуждается в повторениях. Правильно названные пакеты, классы и методы, переменные и константы создают простой и выразительный язык для описания бизнес логики (и не только). Принцип DRY актуален и для названий тоже.
Желание писать хороший код от масштаба проекта не зависит. А большие проекты прекрасно живут с отвратительным кодом внутри.
P.S. Подумайте про Repository в имени класса. Если он лежит в пакете repositories, то может быть не стоит повторяться?