Императив против вопросительных методов - PullRequest
2 голосов
/ 21 августа 2009

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

Например, у меня есть класс, который создает строку для вывода в файл 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

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

Приветствия

Andrew

Ответы [ 2 ]

2 голосов
/ 21 августа 2009

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

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

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

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

1 голос
/ 21 августа 2009

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

...