Лучше возвратить самый определенный или самый общий тип из метода действия? [закрытый]

9
задан John Smithers 8 August 2010 в 14:30
поделиться

2 ответа

Мои рекомендации всегда были наиболее конкретными и наиболее общими в.

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

Однако, если он возвращает массив или List , потому что он построен внутри, код, который получает ваши данные, теперь имеет доступ к большему количеству функций в вашей коллекции.

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

Это означает больше и в большинстве случаев ненужную работу.

Что касается ввода, я выбираю наиболее общий тип, который я могу использовать, поэтому для коллекций, если мне специально не нужен массив, список или что-то подобное, я приму IEnumerable . Поступая так, я гарантирую, что у вызывающего кода меньше работы. Это может означать, что мне нужно поработать внутри компании, так что это компромисс.

Важная часть - достичь баланса. Не будьте слишком общими или слишком конкретными все время и каждый раз.Определите правильный тип, который имеет смысл, и подумайте, что должен делать вызывающий код, чтобы передавать или принимать исходящие данные из вашего кода. Чем меньше работы, тем лучше.

22
ответ дан 4 December 2019 в 08:50
поделиться

В общем, я бы выбрал более общий тип. Таким образом, я не сломаю ни одного клиента, который может использовать информацию о возвращаемом типе.

Если я верну более общий тип, в реализации метода действия я всегда могу изменить тип на что-то другое. Рассмотрим следующий сценарий: вы возвращаете результат настраиваемого действия, производный от ActionResult . Где-то в вашей кодовой базе что-то предполагает, что возвращаемое значение - MyCustomActionResult . В этом случае, если вы измените возвращаемое значение, вы нарушите код клиента.

Кстати: я делаю то же самое - возвращаю наиболее подходящий общий тип - для всех методов, а не только для методов действий.

Изменить: Обратите внимание, что это не означает, что я верну объект . Задача состоит в том, чтобы найти тип, представляющий «наиболее подходящую» абстракцию.

2
ответ дан 4 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: