Размер метода Get

Есть ли какие-либо рекомендации или общий консенсус относительно размера "Get" в терминах строк кода? У меня есть метод Get для члена, который довольно легко вырос до 30 строк кода. Я не уверен, в какой момент это должно быть выведено в метод. Но тогда я бы назвал его только как GetMyString и присвоил значение другому члену и все равно называет его конструктором.

Стоит ли это делать?

Это слишком субъективно для SO?

Ответ 1

Ответ dcastro хорош, но может использовать некоторое расширение:

  • для возврата не требуется много времени.

Это не количественно; пусть количественно это. Свойство не должно занимать больше, чем, скажем, в десять раз дольше, чем требуется для получения поля.

  • он не подключается к внешним ресурсам (базы данных, службы и т.д.).

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

  • у него нет никаких побочных эффектов

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

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

Ответ 2

Это не тот размер, который имеет значение (каламбур не предназначен). Это нормально, чтобы ваша логика была в getter, пока

  • для возврата не требуется много времени.
  • он не подключается к внешним ресурсам (базы данных, службы и т.д.).
  • у него нет никаких побочных эффектов

Это лишь некоторые из рекомендаций по правильному использованию ресурсов.

Edit

В приведенных выше рекомендациях содержится один идеал: владельцы объектов должны вести себя как доступ к данным, потому что это то, что ожидают пользователи.

Из книги "Эффективный С#" Билла Вагнера:

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

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

Объекты доступа не должны выполнять длительные вычисления или выполнять кросс-приложение (например, выполнять запросы к базе данных) или выполнять другие длительные операции, которые будут несовместимы с ожиданиями пользователей для доступа к ресурсу.

Бонус от Альберто: http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx

Ответ 3

Это не обязательно плохо, но если бы это был я, это заставило бы меня нервничать, и я бы попытался как-то разбить его. Геттер - это метод, поэтому просто потянуть все это на 30 + метод линии будет пустой тратой времени, на мой взгляд. Я бы попытался рубить его. Например. если это был цикл с некоторыми проверками, извлечение чеков в качестве методов или некоторые из них.

Ответ 4

Это распространенная плохая практика, чтобы засунуть целую кучу строк в метод Get. У меня что-то установлено в визуальной студии под названием CodeMaid. У него есть что-то, называемое CodeMaid Spade, которое оценивает каждый метод и дает вам оценку. Чем выше оценка, тем хуже ваш метод. Он также может использоваться для свойств. Я предлагаю вам попробовать, он помогает с форматированием, отступом и множеством других хороших практик, а также

Ответ 5

В качестве общего руководства метод не должен содержать больше строк, чем на одном экране. Если вам нужно прокрутить, это слишком велико. Разделите его на более мелкие методы.