Императив против вопросительных методов

При реализации класса лучше практиковать возврат значения для методов (вопросительный) или просто манипулировать атрибутами класса непосредственно внутри метода (императив).

Например, у меня есть класс, который создает строку для вывода в файл CSV. Я мог бы сделать это так:

String output = ""

String records[] = //list of record strings

void extract()
  extractHeader()
  extractRecords()


void extractHeader()
  output += "FirstName,LastName,PhoneNumber"


void extractRecords()
  For Each record In Records
     output += records.toString()

Или я мог бы сделать это так:

void extract()
  output += extractHeader()
  output += extractRecords()


string extractHeader()
  // return header string


string extractRecords()
  // return records as string

Это просто вопрос личных предпочтений или существует общепринятая рекомендация по лучшей практике?

Ура,

Эндрю

2 ответа

Решение

Разделение проблем - это моя метрика (и не слишком быстрая). Это действительно часто напрямую связано с хранением программ СУХОЙ.

Вот две проблемы, которые я вижу: логика и использование. Основная логика extractRecords это запустить цикл. Если вы когда-нибудь хотели снова использовать эту логику, ваш первый вариант теперь имеет эту логику очень сильно (в отличие от слабосвязанной) с очень специфическим применением / использованием этой логики.

Именно поэтому я по умолчанию всегда склоняюсь к функциональному программированию, а не ко всему, что требует состояния или объектно-ориентированного подхода, если я могу.

Также связана и, возможно, может быть просто другая формулировка той же вещи, эта статья: "говори, не спрашивай".

Прочитайте главу 5 книги Code Complete 2, доступную для предварительного просмотра, здесь: http://www.cc2e.com/ Это дает представление о связи, которая применима для этого вопроса.

Другие вопросы по тегам