#.net #architecture #domain-driven-design
#.net #архитектура #дизайн, управляемый доменом
Вопрос:
Независимо от того, используете ли вы шаблон репозитория с интерфейсом или просто реализуете методы доступа к данным в приложении, я часто вижу методы с глаголом ‘Get’ или ‘Find’, предшествующим описанию метода. Мне немного сложно провести различие между (2), потому что я вижу противоречивые примеры при просмотре примеров репозитория DDD или любой другой архитектуры, использующей аналогичное соглашение об именах. Например, взгляните на следующее:
Function FindAllEmployees() As List(Of Employee)
Function GetAllEmployees() As List(Of Employee)
Давайте не будем слишком пристально рассматривать тему «Сотрудник», это всего лишь пример; это может быть что угодно. Мне действительно интересно, есть ли какие-то рекомендации о том, когда описывать метод с помощью глагола «Получить» или «Найти» в начале.
Кто-нибудь может объяснить это или уточнить, пожалуйста? Спасибо!
Ответ №1:
Для меня FindAllEmployees указывает, что он может принимать предикат для фильтрации результатов, тогда как GetAllEmployees сделает именно это, вернет полный список.
Комментарии:
1. Просто чтобы уточнить, моя интерпретация заключается в том, что результаты являются ссылками на сотрудников. Выражение «результаты» немного расплывчато.
2. «Предикатом» будет список условий, применяемых во время выполнения для фильтрации результатов, или он не будет таким динамичным?
3. это может быть строка в стиле SQL, выражение Linq, какой-либо другой способ указания имен и значений. Но да, это будет выполняться во время выполнения.
Ответ №2:
Get
выдает ошибку, если она не существует (и обычно возвращает только 1), Find
возвращает значение null (или пустое IEnumerable
).
Не уверен, что это универсально, но для меня это довольно ясно. GetById
, GetByName
, и т.д. предположим, что совпадение существует (и обычно одно совпадение). FindByEmail
, FindByDepartment
не предполагайте этого и обычно возвращают совпадения 0: n.
Я могу сделать исключение для такого метода, GetAll
который не принимает параметров и возвращает совпадения 1: n, но выдает исключение для 0.
Комментарии:
1. Это что-то вроде обычного именования и поведения? Не могли бы вы поделиться ссылкой или чем-нибудь, пожалуйста?
2. @Razor23Donetsk, по крайней мере, о Java JPA: tuhrig.de/find-vs-get