2011-11-29 106 views
0

我需要一些帮助来确认我正处于正确的轨道上。 我做了流行的在线购物场景的用例图和类图。这个类图是否正确?

请仔细阅读并进行建设性批评,因为我仍然在学习UML,所以让我对你有所看法。

造型背后的故事如下:

公司的名称是X-公司,他们都进入销售的 涂料。 X公司有一个网站销售这些油漆在线销售给两个 类型的客户 - 零售商和批发商。 X公司目前有几种颜色,尺寸和成本不同的颜料,这些颜料在这些特性上明显不同。零售商可登录 网站并以 的时间购买单位数字(如1或2种颜料)的涂料,批发商购买大量涂料的价格为 10%,10种涂料及以上为20%,20种以上涂料为20% ,30%以上为30%以上的油漆及以上。

该网站已尽可能容易。客户到达 网站,选择油漆类型并显示油漆特征 。如果顾客购买,他们选择他们需要的数量。如果客户对价格合适,他们然后 确认他们的订单。在确认后,网站会检查油漆的库存 ,看是否有足够的油漆可用。如果 不可用,则会通知客户并要求选择另一种 类型。如果它们可用,则客户提供支付卡 的详细信息,例如地址,卡号,卡销。通过外部整合完成付款 。付款时,客户订单 发送给客户,除非客户通过网站管理员请求取消或 订单。

网站组织者或管理员负责将新的 涂料添加到网站,并在有新的涂料库存时取出旧涂料。

我画的类图如下所示:

Class Diagram

+0

这看起来太像家庭作业了。你有特定的UML问题吗? – vainolo

+0

Im假设类'用户'是抽象的,这将是很好的标签。 –

回答

1
  • 将类奇异的名字。订单,而不是订单。折扣,而不是折扣。如果你有一个类是一个集合\订单列表,然而,“订单”将罚款。

  • 用户一次只能购买一种以上的油漆! Order类应该有一个Paint的集合,而不是一个Paint实例。

  • Paint,PaintType设计看起来不合逻辑。我不明白为什么应该有不止一节课。组合成一个Paint类。

  • 我认为应该有一个PaintStock类。 Administrator类中的方法似乎是对PaintStock完成的事情,所以将它们移动过来。 Administrator类需要一个PaintStock引用,以便它可以调用PaintStock.Add等。

  • 鉴于其中的内容,支付类别应称为CreditCardPayment。我怀疑信用卡不是付款的唯一方式。我会创建一个支付基类,这样我们可以轻松地扩展以后付款的方式。

  • 添加/删除绘图功能对管理员类不合适。将这些方法放入PaintStock类中。

  • 重命名BulkBuyer到批发商

  • 考虑一个用户类。摆脱零售商和批发商。我看不出有什么不同的价值。在User类中创建一个BuyerType字段以区分。如果你的商业规则规定了基于零售商和批发商的购买限制,那么这个简单的规则差异就很容易生活在一个类别中。

  • 作为一般规则 - 这是一个很好的规则 - 不要存储计算结果。所以Order.TotalCost应该是一个方法而不是字段。

  • 订单需要取消方法。不是管理员类。 Administrator类需要一个Order引用,因此它可以调用Order.Cancel。