0

ポートフォリオ管理用の c++ を書いています。この場合、株式の一部は退職ポートフォリオから取得でき、残りの株式は公開市場にあります。
私の一般的な計画は、次のクラスにデータを含めることです。

class Equity { private:  std::string name, exchange, symbol };
class EquityHistory : public Equity { private std::list<DateRecord> history };
class YahooDAO {};
class RetirementDAO {};
class Portfolio { private: std::list<EquityHistory> equities; }

メインまたは上位レベルのクラスでは、ポートフォリオに株式のリストが入力されます。DAO クラスは、Web から価格履歴を取得するために用意されています。私が持っている質問は、取引所に応じて、Portfolio クラスが正しい DAO クラスを呼び出す方法です。

4

1 に答える 1

0

交換に応じてリダイレクトする 3 番目のデータ プロバイダーで 2 つのデータ プロバイダーをラップできます。

このように Folio の観点から見ると、すべてが抽象的であり、データ ソースを認識しません。後でデータのフェッチ方法を変更することにした場合でも、Portfolioクラスを更新する必要はありません。

これがアイデアです:

class DAO
{
    private: YahooDAO* yahoo, RetirementDAO* retirement;

    public: DAO()
    {
        yahoo = new YahooDAO();
        retirement = new RetirementDAO();
    }

    public: std::List<Data> getData(EquityHistory* equity)
    {
        std::List<Data> data;

        if (equity->exchange = "some exchange")
        {
            data = yahoo->getData(equity);
        }
        else if (equity->exchange = "another exchange")
        {
            data = retirement->getData(equity);
        }

        return data;
    }
};

class Portfolio
{
    private: std::list<EquityHistory> equities;
    private: DAO* dao;

    public: Portfolio(DAO* dao)
    {
        this->dao = dao;
    }

    public: void loadData()
    {
        ...
        std::List<Data> data = dao->getData(equity);
        ...
    }
};

必要に応じて、インターフェイスIDataSourceを使用してgetDataメソッドを抽象化できます。

于 2013-06-15T17:09:10.193 に答える