そこで、プログラムの出力をデータベースにダンプする誰かのクラスのコード レビューを行っています。そのため、彼らはstruct Foo
たくさんのメンバーのリストを取得しています。現在、クラスにメンバー変数があり、各呼び出しで値をコピーしており、SQLBindParameter テーブルは変更していません。
struct Foo
{
int bar;
int baz;
};
class SQLWriter
{
public:
SQLWriter()
{
//initializes SQLHSTMT hQuery to something that takes two ? inputs
SQLBindParameter(hQuery,0,SQL_PARAM_INPUT,SQL_C_INT, 0, 0, &bar_, 0, NULL);
SQLBindParameter(hQuery,1,SQL_PARAM_INPUT,SQL_C_INT, 0, 0, &baz_, 0, NULL);
}
void WriteFoos(const std::vector<Foo> foos)
{
for (int i = 0; i < foos.size(); i++)
{
const Foo& foo = foos[i];
bar_ = foo.bar;
baz_ = foo.baz;
SQLExecute(hQuery);
}
}
private:
SQLHSTMT hQuery; int bar_; int baz_;
};
これは私には正気ではないように思えますが、正直なところ、私はデータベースのことを知りません。私は単なる C++ プログラムです。それを行う正しい方法と思われるのは次のとおりです。
struct Foo
{
int bar;
int baz;
};
class SQLWriter
{
public:
SQLWriter()
{
//initializes SQLHSTMT hQuery to something that takes two ? inputs
}
void WriteFoos(const std::vector<Foo> foos)
{
for (int i = 0; i < foos.size(); i++)
{
const Foo& foo = foos[i];
SQLBindParameter(hQuery,0,SQL_PARAM_INPUT,SQL_C_INT, 0, 0, &foo.bar, 0, NULL);
SQLBindParameter(hQuery,1,SQL_PARAM_INPUT,SQL_C_INT, 0, 0, &foo.baz, 0, NULL);
SQLExecute(hQuery);
}
}
private:
SQLHSTMT hQuery;
};
このようにして、書き込み呼び出しには、これらの奇妙な副作用とすべての余分な変数がありません。foo には実際にはより多くの変数 (10 個) があるため、これはより賢明に思えます。私はここで間違っていますか?