ここで、アップローダーにとって戦略パターンが役立つ可能性があります。Uploader クラスは、解析属性と永続化属性を単純に含む一種のコンテナ/マネージャ クラスになります。これらの属性はどちらも抽象基本クラスとして定義され、複数の実装を持つことになります。常に csv と oracle になるとあなたは言いますが、このアプローチは将来的にも保証され、永続化コードから解析/検証を分離することにもなります。
次に例を示します。
class Uploader
{
private:
Parser parser_;
Persistence persistence_;
void upload() {
parser_.read();
parser_.parse();
parser_.validate();
persistence_.persist(parser_.getData());
}
public:
void setParser(Parser parser) {parser_ = parser;}
void setPersister(Persistence persistence) {persistence_ = persistence;}
};
Class Parser
{
abstract void read();
abstract void parse();
abstract void validate();
abstract String getData();
};
class Persistence
{
abstract persist(String data);
};
class CsvParser : public Parser
{
// implement everything here
};
// more Parser implementations as needed
class DbPersistence : public Persistence
{
// implement everything here
};
class NwPersistence : public Persistence
{
// implement everything here
};
// more Persistence implementations as needed