如何进行可读的数据返回

时间:2014-05-14 03:09:12

标签: c++ qt

我读过这篇文章http://www.slideshare.net/redigon/refactoring-1658371  在第53页上,它指出"您有一个返回值的方法,但也改变了对象的状态。创建两个方法,一个用于查询,另一个用于修改。

但是如果在查询中我需要多于1个字段的值。

例如:

QSqlQuery query(QSqlDatabase::database("MAIN"));
QString command = "SELECT FIELD1, FIELD2, FIELD3, FIELD4, FIELD5 FROM TABLE";
query.exec( command );

这是我所知道的方法,但我真的觉得这不是那么可读

QString values;
columnDelimiter = "[!@#]";
rowDelimiter = "[$%^]";
while( query.next )
{
    values += query.value(0).toString() + columnDelimiter;
    values += query.value(1).toString() + columnDelimiter;
    values += query.value(2).toString() + columnDelimiter;
    values += query.value(3).toString() + columnDelimiter;
    values += rowDelimiter;
}

我会像这样回复它。

QStringList rowValues, columnValues;

rowValues = values.split(rowDelimiter);

int rowCtr =0;

while( rowCtr < rowValues.count() )
{
    columnValues.clear();
    // Here i got the fields I need
    columnValues = rowValues.at( rowCtr ).split( columnDelimiter );
    // I will put the modification on variables here

    rowCtr++;

}
编辑:有没有更可读的方法呢?

1 个答案:

答案 0 :(得分:1)

&#34;有更可读的方法吗?&#34; 是一个主观问题。我不确定你的问题是否能在SO上持续多久,因为SO更喜欢事实上的问题和解决方案。

我个人认为会让您的代码更具可读性:

  • 为您的数据集使用自定义数据结构。字符串不是表格数据的正确数据结构。定制结构列表更好。

示例:

// data structure for a single row
struct MyRow {
    QString a, b, c;
}

...

QList<MyRow> myDataSet;
while( query.next )
{
    MyRow currentRow;
    // fill with data
    currentRow.a = query.value(0).toString();
    currentRow.b = query.value(1).toString();
    ...

    myDataSet.append(currentRow);
}
  • 我怀疑你的所有数据都是文字。有些可能是数字。切勿将数字存储为字符串。那效率很低。

  • 首先将所有数据读入数据结构,然后读取数据结构进行处理。你为什么不把两者结合起来?即在阅读数据的过程中,使用相同的while(...)

  • 在评论中,您对enumstruct之间的区别感到困惑。我建议,停止做复杂的数据库和QT的东西。获取一本基础C ++书籍并尝试首先理解C ++。