Стоит ли включать имя сущности в имя метода репозитория?

Как лучше именовать методы репозитория,
так:

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, то может быть не стоит повторяться?

→ Ссылка