Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 命令式与疑问式_Oop_Class Design_Imperative_Interrogative Programming - Fatal编程技术网

Oop 命令式与疑问式

Oop 命令式与疑问式,oop,class-design,imperative,interrogative-programming,Oop,Class Design,Imperative,Interrogative Programming,在实现一个类时,更好的做法是为方法返回一个值(询问式)还是直接在方法中操作类属性(命令式) 例如,我有一个类,它构建一个字符串以输出到CSV文件。我可以这样做: String output = "" String records[] = //list of record strings void extract() extractHeader() extractRecords() void extractHeader() output += "FirstName,LastNa

在实现一个类时,更好的做法是为方法返回一个值(询问式)还是直接在方法中操作类属性(命令式)

例如,我有一个类,它构建一个字符串以输出到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
或者,我可以这样做:

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
这仅仅是个人偏好的问题,还是有一个普遍接受的最佳实践指南

干杯

安德鲁是我的标准(也不是一个硬性的标准)。这通常与保留程序直接相关

以下是我看到的两个关注点:逻辑和用法。
extractRecords
的核心逻辑是运行for循环。如果您曾经想要再次重用该逻辑,那么您的第一个选项现在将该逻辑与该逻辑的非常特定的应用程序/用法非常耦合(而不是)

这就是为什么默认情况下我总是倾向于函数式编程,而不是任何需要状态或面向对象性的东西


这篇文章也是相关的,可能只是同一事物的不同措辞:。

阅读代码完成2书的第5章,在这里预览:它将耦合置于适用于此问题的角度。

此问题中讨论的内容也适用于您的。谢谢,这非常有帮助。