【问题标题】:What design pattern to use for collection of items?使用什么设计模式来收集项目?
【发布时间】:2017-07-19 20:42:30
【问题描述】:

我试图使这个示例尽可能自然以使其简单。

假设我有一组项目。例如 item1, item2, item3, item4 等。

目前item用struct表示:

// only contains data
struct item{
  string name;
  std::vector<string> parts_name;
  std::vector<double> parts_price;
  std::vector<string> item_color;
  ...
};

itemx item1, item2...

然后我有一个名为items的课程

class items{
  public:
  // return name of all items
  vector<string> get_all_item();

  // return price of all parts 
  vector<double> get_all_parts_price();  

 private:
  // hold vector of item
  vector<shared_ptr<item>> list_of_items;

  // name of item and its parts price
  // eg: <item_1_part_1, $1.3>
  // eg: <item_1_part_2, $2.3>
  // eg: <item_2_part_1, $4.3>
  map<string, double>  parts_prices;
};

我当前的项目类的问题是它变得非常庞大, 随着项目特征的增加。

我的解决方案:使 struct item 包含分配负载的函数 从类项目中构造项目。

还有其他更好的方法或设计模式可以解决这类问题吗?

【问题讨论】:

  • 可能只使用std::vector&lt;item&gt;
  • 您可能不应该返回向量的副本...只需将所有内容存储在@Justin 提到的std::vector&lt;item&gt; 中,get_all_items() 返回一个(const) std::vector&lt;item&gt;&amp; 并且对于各个部分,您可以创建自定义迭代项目和“子”向量的迭代器,这样当您只需要阅读某些内容时,您就不必创建向量......
  • get_all_parts_price() 想要返回什么?所有零件的所有价格的总和,还是价格和零件的列表?
  • @RichardHodges 列出所有物品中所有零件的价格.. 基本上是parts_prices 的所有值。
  • 为什么颜色是矢量?为什么物品既有零件又有价格?当每个项目都有一个价格向量时,为什么项目会返回一个价格向量?什么是项目,与零件相比它代表什么?您正在做 OO 设计并寻求帮助,而没有描述对象 是什么。为什么零件不是物品,它们的区别是什么,零件为什么存在?

标签: c++ design-patterns


【解决方案1】:

很难告诉您如何根据您的输入“设计”您的应用程序 - 我认为您在这里关注的是错误的方面。您的项目结构包含向量。这意味着复数。但是,该类仍然称为item

从这个意义上说:不要在这里考虑模式。相反,退后一步,仔细看看你打算建模的“现实世界的东西”。你看,对象和类的核心是为你正在处理的建立一个模型

所以这里没有答案:仔细研究您的对象所具有的“真实世界”关系,然后专注创建一个有助于完成您打算完成的工作流程的 OO 模型实施。

【讨论】:

  • 多么巧合!这是我刚刚为另一个与此类似的问题所做的域模型示例,因为可能不需要模式! stackoverflow.com/a/45224011/1168342
  • 很好,即使使用 UML ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2010-12-09
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多