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 类提供从网络获取价格历史。我的问题是如何让 Portfolio 类调用正确的 DAO 类,具体取决于交换。

4

1 回答 1

0

您可以将您的两个数据提供者包装在第三个中,该提供者将根据交换进行重定向。

从作品集的角度来看,这种方式都是抽象的,它不知道数据源,如果以后您决定更改获取数据的方式,则不必更新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 回答