Oop 命令式与疑问式
在实现一个类时,更好的做法是为方法返回一个值(询问式)还是直接在方法中操作类属性(命令式) 例如,我有一个类,它构建一个字符串以输出到CSV文件。我可以这样做: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
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章,在这里预览:它将耦合置于适用于此问题的角度。此问题中讨论的内容也适用于您的。谢谢,这非常有帮助。