Как назвать вариант метода Get ()? - PullRequest
1 голос
/ 10 ноября 2011

Я разрабатываю API для абстракции, подобной репозиторию. У меня есть два метода:

// Throws an exception if object cannot be found
MyObj Get(MyIdType id);

// Returns false if object cannot be found; no exception
bool TryGet(out MyObj obj);

Существует требование для третьего варианта: тот, который возвращает ноль, если объект не может быть найден, и не выдает исключение.

// Returns null if object cannot be found; no exception
MyObj ?????(MyIdType id);

Я застрял на том, как назвать это. GetOrDefault исключено как запутанное. GetIfNotNull было предложено, но также кажется неясным. GetOrNull пока наиболее перспективный.

Кто-нибудь имеет какие-либо другие предложения или знает о каких-либо общедоступных API, соглашениям которых я могу следовать?

Ответы [ 6 ]

3 голосов
/ 10 ноября 2011

Я бы предпочел не иметь метод Get, который ведет себя по-разному в двух ситуациях.Почему бы не получить возврат Get null для всех случаев.Зачем вообще исключение?

Я бы предпочел оставить на усмотрение кода пользователя исключение, если при необходимости возвращается нулевое значение.

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

2 голосов
/ 10 ноября 2011

Я бы пошел с GetOrDefault (как вы сами себе предложили) на основе метода расширения LINQ FirstOrDefault.

Может быть, GetValue и GetValueOrDefault будут звучать лучше, хотя.

1 голос
/ 10 ноября 2011

Как насчет: GetOrDefault

...OrDefault довольно стандартно в LINQ.

0 голосов
/ 10 ноября 2011

Я бы оставил только bool TryGetXXXXX(out T value) вариант на вашем interface и предоставил бы остальные в качестве методов расширения.Это делает ваш интерфейс очень компактным, но в то же время полезным для клиента.

0 голосов
/ 10 ноября 2011

Вы можете попробовать GetObjectOrReturnDefaultValue или, поскольку вы знаете, что это ссылочный тип GetObjectOrReturnNull. Это долго и некрасиво, но не двусмысленно.

0 голосов
/ 10 ноября 2011

На мой взгляд, вы должны придерживаться:

MyObj Get(MyIdType id);

Вместо того, чтобы выдавать исключение, просто верните null. Если существует определенное требование для исключения или (необязательно), null, я бы попытался:

MyObj Get (MyIdType id, bool ReturnDefault = false) // if .net 4

Мне не особенно нравится этот вариант, но иногда требования переопределяют то, что мы считаем правильным или естественным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...