Насколько меня должны беспокоить внешние переменные?
Это не вопрос программирования, как таковой , но также казался слишком близким к программированию, чтобы идти в гостиную.
Наш код усеян такими методами, как этот:
public int fetchStuff(int param1, int param2, out int returnA, out string returnB...)
Где этот метод выполняет какие-то вычисления на основе параметров 1 & 2 (обычно запрос БД, но это не обязательно).
Речь идет не о верблюжьей оболочке имени метода. Хотя это неверно (а также свидетельствует о качестве кода, создаваемого людьми, которые делают это-они не могут получить маленькие вещи правильно, как они могут получить большие вещи правильно?), я ставлю под сомнение использование переменных out. Это кажется таким не-ОО. Возьмите некоторые входные данные и выдайте результат или создайте исключение.
Кроме того, использование переменных out означает, что сигнатура должна изменяться при добавлении новых данных к результатам. Конечно, мы можем использовать перегрузки, чтобы старая сигнатура вызывала новый метод и выбрасывала новые данные, чтобы уменьшить влияние на потребителей, которые не заботятся о новых данных, но это кажется неуклюжим. (В отличие от возврата объекта, где мы можем добавить новую информацию, а потребители могут использовать ее или нет, по своему усмотрению, но подписи не меняются).
Ото, сами Microsoft используют переменные в методах типа TryParse, так что, возможно, это то, что действительно беспокоит меня, но не должно беспокоить.
Что я уже пробовал:
В зависимости от ситуации и временных ограничений я обычно рефакторирую их, чтобы вернуть объект StuffContainer, а затем рефакторирую вызывающие объекты, чтобы ссылаться на него. Просто не уверен, насколько это необходимо.
(Необходимо не то слово; очевидно, что нет необходимость сделать это. Хотя я не могу придумать правильное слово-не желательно, так как это явно так.)
F-ES Sitecore
Если функция возвращает сложные данные, то она должна возвращать выделенный объект с соответствующими свойствами.
agolddog
Вау, спасибо за быстрые ответы. Но, как я уже сказал, это не совсем вопрос программирования; конечно, мы могли бы использовать кортежи или выделенный объект, как упоминает F_ES Sitecore.
Последнее-это рефакторинг, к которому я склоняюсь, поскольку он дает лучший контекст для фрагментов данных, чем решение кортежа.
Реальный вопрос заключается в том, насколько сильно меня должно беспокоить использование внешних переменных. Это действительно точит мои шестеренки, но я не уверен, что преувеличиваю ситуацию.